如何打开新的命令提示符窗口并在其中执行for循环?

6

我有一个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窗口中运行此命令(迭代器之前只有一个%符号),它按预期在新的CMD窗口中循环3次启动我的Python脚本“test.py”。
当我从我的test.cmd运行相同的命令(这次当然是两个%),新的CMD窗口弹出并立即消失。我没有收到任何错误消息,也无法让新窗口停留。
我怀疑我需要做更多的编码,但我无法找出正确的语法。我必须改变什么才能让这个for循环从我的test.cmd运行?
3个回答

6

如果您坚持使用call,则需要进行另一种级别的解析,因此在批处理文件中您需要使用:

call "cmd /k start for /l %%%%i in (1,1,10) do echo %%%%i"

(将/c替换为/k以查看输出)


2

试试这个:

call "cmd /c for /l %x in (0, 1, 2) do @python test.py config%x"

当您在命令提示符中执行循环时,需要使用单个百分号。并且需要删除cmd /c后面的start命令,因为for是内部cmd命令。@用于抑制在每次迭代中打印提示值。

1
你的解决方案在命令行中可以工作,但是当我通过我的test.cmd启动它时失败了。我收到以下错误消息。C:>call "cmd /c for /l x" x" 在此时是意外的。 - Demento
1
@Demento,为什么你不直接在test.cmd中使用这行代码:for /L %%x in (0,1,2) do python.exe test.py config%%x,因为我认为这样更有意义? - Mofi
@Demento - 如果要从批处理脚本中使用此命令,您需要将百分号符号加倍。 - npocmaka
@Mofi 我需要使用“call”,因为我想在不同的cmd窗口中并行运行几个这样的for循环。我省略了其他循环,以保持示例简单。 - Demento

1
这个答案详细阐述了您帖子标题中提出的核心问题,而不是您提供的示例代码。
要在单独的(cmd)窗口中运行for循环,需要使用start命令。此外,应该明确给出cmd实例,以避免在调用内部命令行时遇到start问题(例如,括号可能会导致错误),并且在循环完成后控制新窗口发生的情况。以下命令行在新的cmd窗口中运行for循环,并在循环完成后保持打开状态(对于调试非常有帮助):
start "" /WAIT cmd /K "for /L %%X in (0,1,2) do echo %%X"

在新窗口中输入 exit 以关闭它。为了最终自动关闭新窗口,请将 /K 替换为 /C
如果您不希望主(调用)批处理脚本等待循环完成并关闭新窗口,则删除 /WAIT 开关。这样启动命令行,但主脚本立即继续执行。这允许您同时在单独的窗口中运行多个 for 循环。
这种技术不仅限于仅调用for循环。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接