似乎无法在Windows批处理文件的循环中运行多个命令

时间:2015-02-09 16:21:58

标签: batch-file syntax

ECHO OFF 
setlocal enabledelayedexpansion
CD C:\Work\
FOR /D /r %%G in ("t*") DO (
   START C:\prg.exe %%G\input_1 %%G\input_2 %%G\cpp_output
   FOR /D /r %%H in (%%G\cpp_output\*.txt) DO (
        FOR /F %%i in ("%%H") DO (
            @set FN=%%~nxi DO (
                START C:\Work\compareResults.m %%G\matlab_output\FN.txt    %%G\cpp_output\FN.txt
            )
        )
    )
)
PAUSE

我一直试图让这个.bat代码运行但它不起作用 - 窗口打开并快速关闭 - 即prg没有运行。但是,当我跑:

ECHO OFF 
setlocal enabledelayedexpansion
CD C:\Work\
FOR /D /r %%G in ("t*") DO (
    START C:\prg.exe %%G\input_1 %%G\input_2 %%G\cpp_output
)
PAUSE

运行prg。我想额外的命令似乎有问题,但我不知道问题是什么。 根据{{​​3}},可以在一个单独的命令中有一些命令,它们可以在不同的行中。然而,这没有用,所以我尝试使用&有多个命令,我也尝试使用插入符号(^)来破坏行。这些似乎都不起作用,因为批处理窗口消失得太快,我甚至无法调试任何东西。对于我做错了什么的任何想法?甚至如何调试.bat程序?

1 个答案:

答案 0 :(得分:0)

...
       @set FN=%%~nxi DO(
   START C:\Work\compareResults.m %%G\matlab_output\FN.txt    %%G\cpp_output\FN.txt))))

这不会奏效。这是错误的语法。 DO不能站在SET命令后面。在你的情况下,DO仅与FOR:

FOR something DO (
    codeline 1
    codeline 2
    ...
    codeline n
)

如果要在FOR块中执行多个命令行,只需在括号()之间写入它们,每个命令都在新行中。

但是,还有一种方法可以将几个命令组合在一行中(不要在这里使用它):command1&command2&...comandn将一个接一个地执行命令1到n。即使其中一个命令引发错误,它们也会被执行。如果你使用&&相反(command1&&command2&&...comandn),只有在前一个命令没有错误的情况下才会执行每个命令。