【问题标题】:Infinite loop Windows batch file?无限循环Windows批处理文件?
【发布时间】:2015-09-01 19:10:58
【问题描述】:

我在 Linux 中循环运行了这个 bash 脚本,Windows 相当于什么?

while ./process.sh; do sleep 1; done

我有一个 Windows 批处理文件,只要返回码为 0,我就想运行它

【问题讨论】:

  • 还有一个关于无限循环的very similar post...
  • 我尝试使用第二个答案,但它对我不起作用。
  • 什么不起作用?为什么?您是否收到错误消息,或者究竟发生了什么?

标签: loops batch-file infinite-loop


【解决方案1】:
cmd /q /e /c"for /l %%a in () do (call process.cmd || exit) & >nul timeout /t 1"

如果您想从命令行测试它,请将 %%a 更改为 %a

【讨论】:

  • 我也是! @MCND,你为什么使用cmd /C?我觉得没必要吧?就因为/Q??
  • @aschipfl,不,这是因为我不知道调用者批处理文件中的进程是否需要在此行之后继续。如果我在批处理上下文中运行无限for /l,我只能使用exit 离开它,但批处理文件将结束。在单独的cmd 实例中启动无限循环(将在命令行上下文中运行代码)我可以使用exitexit /b 离开循环并继续运行调用程序批处理文件。
  • 啊,我明白了——非常感谢您的解释!请注意exit /B 不能使用,它会挂起...
  • @aschipfl,不,经过测试,它按指示工作。如果无限for /l在命令行上下文中运行(cmd /c的原因,那么exit /b可以强制循环结束。但是,如果无限for /l在批处理上下文中执行(没有@ 987654337@) 你只能留下exit
  • 优秀...我正在寻找一个在命令行中使用的循环,而这个可以快速完成工作!谢啦~~~
【解决方案2】:

我认为您正在寻找这样的东西:

:LOOP
timeout /T 1 /NOBREAK
call "\path\to\your\process.sh\equivalent\batch\file"
if not ErrorLevel 1 goto :LOOP

注意:这在命令行上不起作用。您需要将此代码放在批处理文件中。

【讨论】:

  • timeout 必须放在 call 之前;否则超时修改批处理文件返回的errorlevel。
  • 感谢您的提示,@Aacini,我忘记了...见我的edit...
猜你喜欢
  • 2023-03-23
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
相关资源
最近更新 更多