理解批处理运行语义的一个非常简单的问题。请看这段代码
FOR /F %%x IN (file.txt) DO (
if /i "%~1"=="%%x" goto :label
if /i "%~1"=="%%xYZ" goto :label
)
:label
......
跳转到标签后,然后batch会自动回到for循环吗?如果是这样,有没有办法让它回到 for 循环?谢谢
理解批处理运行语义的一个非常简单的问题。请看这段代码
FOR /F %%x IN (file.txt) DO (
if /i "%~1"=="%%x" goto :label
if /i "%~1"=="%%xYZ" goto :label
)
:label
......
跳转到标签后,然后batch会自动回到for循环吗?如果是这样,有没有办法让它回到 for 循环?谢谢
goto命令将跳转到一个标签并在您的示例中跳出循环,但是,您应该能够使用call,它可用于将标签作为子例程调用:
for /F %%x in (file.txt) do (
if /i "%~1"=="%%x" call :label
if /i "%~1"=="%%xYZ" call :label
)
:: end script here
exit /b 0
:label
调用[[ Drive: ][ Path ] FileName [ BatchParameters ]] [ :label [ arguments ]]
...
: label :指定您希望批处理程序控件跳转到的标签。通过使用带有此参数的调用,您可以创建一个新的批处理文件上下文并将控制权传递给指定标签之后的语句。第一次遇到批处理文件的结尾(即跳转到标签后),控制返回到调用语句之后的语句...
而且您也无法访问该变量。我建议调用另一个批处理文件并将 %%x 传递给它。这是最接近子程序的地方。
如果label
在批处理文件中的 for 循环之后,那么,不,批处理文件不会回到 for 循环