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程序?
答案 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
),只有在前一个命令没有错误的情况下才会执行每个命令。