【发布时间】:2017-02-21 20:18:38
【问题描述】:
运行以下批处理文件时,我希望程序从 func 例程返回并显示“结束程序”消息。相反,在 for 循环中执行 pause 命令后,按一个键时程序似乎挂起。将 exit /b 替换为 goto :eof 似乎具有相同的效果。
@echo off
echo start program
call :func
echo end program
pause
exit /b
:func
echo start func
for /l %%l in () do (
echo start loop
pause
exit /b
echo end loop
)
echo end func
exit /b
预期输出:
start program
start func
start loop
Press any key to continue...
end program
Press any key to continue...
我想避免使用 goto-label 作为无限循环。使用以下循环,迭代消息只显示一次:
:test
for /l %%l in (1,1,3) do (
echo iteration: %%l
exit /b
)
exit /b
在例程中使用无限循环并且仍然能够返回给调用者的适当方法是什么?
【问题讨论】:
-
我不确定我是否遵循,无限这个词是特定的,如果它是连续的,它如何返回?
-
@Compo:
exit /bsupposed 用于结束循环,但它似乎不适用于/L循环 -
这个想法是在满足特定条件时从 for 循环内的函数调用返回。在批处理文件脚本中,您不能从其主体内影响 for 循环的条件。我还发现,在避免使用 goto-label 的同时,没有直接的方法可以摆脱无限循环。有关详细信息,请参阅以下 DosTips 主题:dostips.com/forum/viewtopic.php?f=3&t=2707
-
jeb answered this here 退出无限循环的唯一方法是同时退出 cmd 会话。
-
问题是循环实际上完成了,即使它的主体中有
exit /B或goto,尽管在这种情况下主体不再执行;试试for /L %%I in (0,1,999999) do @(echo Body & exit /B),你会注意到批处理文件需要相当长的时间才能退出,尽管主体只执行一次,因为循环在后台迭代到末尾)...
标签: windows batch-file cmd