我有一个带有以下命令的test.cmd文件:
call "cmd /c start echo foo && pause"
call "cmd /c start for /l %%x in (0, 1, 2) do python test.py config%%x"
第一个命令工作正常,表明一般方法应该有效。带有for循环的第二个给我带来了麻烦。
当我直接在CMD窗口中运行此命令时(在迭代器之前只有一个%符号),它启动我的python脚本" test.py"在一个新的CMD窗口中按预期循环3次。
当我从test.cmd运行相同的命令时(这次当然是2%),新的CMD窗口会弹出并立即消失。我没有收到任何错误消息,也无法保留新窗口。
我怀疑我需要做更多编码,但我无法弄清楚正确的语法。我必须更改什么才能让这个for循环从我的test.cmd运行?
答案 0 :(得分:5)
如果你坚持使用call
,还有另一级别的解析,所以在批处理文件中你必须使用:
call "cmd /k start for /l %%%%i in (1,1,10) do echo %%%%i"
(将/c
替换为/k
以查看输出)
答案 1 :(得分:2)
试试这个:
call "cmd /c for /l %x in (0, 1, 2) do @python test.py config%x"
在命令提示符下执行循环时,您需要单个百分比符号。
您需要在cmd /c
之后删除启动命令,因为for
是内部cmd命令。 @
用于在每次迭代时禁止打印提示值。
答案 2 :(得分:1)
这个答案详细阐述了帖子标题中陈述的核心问题,而不是您提供的示例代码。
要在单独的(for
)窗口中运行cmd
循环,需要start
命令。此外,应该给出一个显式的cmd
实例,以便在调用内部命令行时避免start
的问题(例如,括号可能导致错误),并且还可以控制循环结束后的新窗口。
以下命令行在新的for
窗口中运行cmd
循环,该循环在循环结束后保持打开状态(非常有助于调试):
start "" /WAIT cmd /K "for /L %%X in (0,1,2) do echo %%X"
在新窗口中键入exit
以关闭它。要最终自动关闭新窗口,请将/K
替换为/C
。
如果您不希望主(调用)批处理脚本等待循环完成并关闭新窗口,请删除/WAIT
开关。这样命令行就会启动,但主脚本会立即继续执行。这允许您同时在单独的窗口中运行多个for
循环。
此技术不仅限于调用for
循环。