【发布时间】:2018-01-12 19:42:17
【问题描述】:
我正在尝试编写一个批处理文件,对于一组数字(1 到 10),它会按顺序启动一个可执行文件。一组数字中的数字被传递给一个文件,以便可执行文件以批处理模式运行。但是,由于可执行文件占用资源,我希望一次只运行 5 个这些可执行文件(总共将运行 1500 个可执行文件)。我已经 jimmy-rigged 一些脚本来监视任务列表,并且在 5 个可执行文件当前正在运行时不继续启动可执行文件。一旦任务数降到 4,下一个可执行文件将被启动。
简化的最小工作示例(我显然没有运行记事本):
FOR %%g IN (1 2 3 4 5 6 7 8 9) DO (
:loop
tasklist | find /I /C "OpenSees.exe" >process.txt
FOR /F "tokens=*" %%a IN (process.txt) DO (
IF "%%a" EQU "5" (goto :loop)
)
start notepad.exe
PAUSE
)
这里发生的情况是,一旦 %%a 等于 5,就会调用 goto,并且循环工作正常并且不会启动更多可执行文件。然而,一旦一个“记事本”被关闭,等待循环被打破(如预期的那样),但最初的 FOR 循环也被打破(%%g 不再是一个定义的变量)并且脚本在没有 %%g 传递 5 的情况下结束6 7 8 和 9。Echo %%g 在等待循环循环时返回 echo %g。
我在这里做错了什么?
提前谢谢你。
【问题讨论】:
-
在
For循环中使用Goto。
标签: batch-file for-loop nested-loops goto