首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当for循环中嵌套了goto命令时,理解批处理是如何做的

当for循环中嵌套了goto命令时,理解批处理是如何做的
EN

Stack Overflow用户
提问于 2013-05-18 06:59:34
回答 3查看 4.8K关注 0票数 1

一个非常简单的问题来理解批处理运行的语义。请看这段代码

代码语言:javascript
运行
复制
FOR /F %%x IN (file.txt) DO (
if /i "%~1"=="%%x" goto :label
if /i "%~1"=="%%xYZ" goto :label
)
:label
......

跳转到标签后,batch会自动返回到for循环吗?如果是这样的话,有没有办法回到for循环呢?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-18 07:18:42

在您的示例中,goto命令将跳转到标签并跳出循环,但是,您应该能够使用call,它可用于将标签作为子例程调用:

代码语言:javascript
运行
复制
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语句...之后的语句

票数 2
EN

Stack Overflow用户

发布于 2013-05-18 07:03:18

如果label位于批处理文件中的for循环之后,则批处理文件不会返回到for循环

票数 0
EN

Stack Overflow用户

发布于 2013-05-18 07:09:53

而且你也不能访问这个变量。我建议调用另一个批处理文件并将%%x暂停到它。这是你能得到的最接近于子例程的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16619033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档