gpt4 book ai didi

windows - 无法从例程内的无限循环返回

转载 作者:可可西里 更新时间:2023-11-01 09:27:59 26 4
gpt4 key购买 nike

当运行以下批处理文件时,我希望程序从 func 例程返回并显示“结束程序”消息。相反,在 for 循环中执行暂停命令后按下某个键时程序似乎挂起。将 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

在例程中使用无限循环并仍然能够返回调用者的合适方法是什么?

最佳答案

在链接的 DosTips 主题的回复 #7 中,您可能会读到这句话:“没有办法在相同的 CMD 上下文中打破 FOR/L 循环,所以我使用了一个技巧来将循环导出到一个新的 CMD,可以通过 EXIT 命令中断,并且执行返回到调用者代码”。即:

@echo off
if "%~1" neq "" goto %1

echo start program
cmd /C "%~F0" :func
echo end program
pause
exit /b

:func
echo start func
for /l %%l in () do (
echo start loop
pause
exit
echo end loop
)
echo end func
exit /b

您可以在 The ultimate while loop 阅读对这一点的进一步描述。 DosTips 主题。

关于windows - 无法从例程内的无限循环返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42377151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com