如何打开新的cmd窗口并在其中执行for循环?

时间:2016-04-17 08:41:30

标签: windows batch-file cmd

我有一个带有以下命令的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运行?

3 个答案:

答案 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循环。