一个非常简单的问题来理解批处理运行的语义。请看这段代码
FOR /F %%x IN (file.txt) DO (
if /i "%~1"=="%%x" goto :label
if /i "%~1"=="%%xYZ" goto :label
)
:label
......跳转到标签后,batch会自动返回到for循环吗?如果是这样的话,有没有办法回到for循环呢?谢谢
发布于 2013-05-18 07:18:42
在您的示例中,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从call page on the Microsoft TechNet site
调用[驱动器: FileName BatchParameters] [:标签参数]
..。
:label :指定您希望批处理程序控件跳转到的标签。通过使用带有此参数的call,您可以创建一个新的批处理文件上下文,并将控制传递给指定标签后面的语句。第一次遇到批处理文件的末尾时(即跳到标签之后),控制返回到call语句...之后的语句
发布于 2013-05-18 07:03:18
如果label位于批处理文件中的for循环之后,则批处理文件不会返回到for循环
发布于 2013-05-18 07:09:53
而且你也不能访问这个变量。我建议调用另一个批处理文件并将%%x暂停到它。这是你能得到的最接近于子例程的东西。
https://stackoverflow.com/questions/16619033
复制相似问题