@echo off
set v=a;b;c;d;e
echo %v%>v.txt
for /l %%a in (1,1,5) do call :aa %%a
pause
:aa
for /f "tokens=%1 delims=;" %%i in (v.txt) do echo %%i
goto :eof
怎么会有空呢?
第二个for是第一个调用的,当第一个for循环第一次,也就是当 a=1时,tokens也就等于1,取第一个字符后退出循环执行 goto :eof 跳转到第一个for继续下一次循环,这次 a=2 ,tokens也就是2,第二个for取第二个字符后又goto :eof 回到第一个for中,当第一个for的a=5时,tokens=5执行取第5个字符后又 goto :eof 回到第一个for,这时,已经达到最大数5,退出for循环,那么第二个for也就不会被执行,应该不会出现tokens等于空的问题
你写的那个是错的- @if not defined dbug echo off
- set v=a;b;c;d;e
- echo %v%>v.txt
- for /l %%a in (1,1,5) do call :aa %%a
- pause
- :aa
- for /f "tokens=%1 delims=;" %%i in (v.txt) do echo %%i
- if "%1"=="5" goto :end
- goto :eof
复制代码 这样才行,但后面的 if 是多余的,当%1=5时也就是第一个for执行到了最后一次,不会再执行了,所以,这里的判断没什么作用
个人见解,错了请原谅 |