Windows BAT - IF语句在FOR循环中失败

时间:2012-06-28 22:45:54

标签: windows if-statement for-loop batch-file

所以我一直试图弄清楚这一点,但没有任何事情发生在我身上。我把它缩小到一个小案子,所以请让我知道你的想法。

我有一个文件目录(1-a.txt和1-b.txt)和一个这样的批处理文件:

for %%X in (1) do ^
fc %%X-a.txt %%X-b.txt > tmp.txt &^
if errorlevel 0 (echo 5) else (echo 6) &^
echo 7

基本上,如果文件相同,我希望它回显5,如果它们不同则我希望回显6,7。 然而,它总是回声5.回声7完全被忽略。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当错误级别至少 0时,

if errorlevel为真。它总是大于或等于比较:

C:\>help if
Performs conditional processing in batch programs.

...

  ERRORLEVEL number Specifies a true condition if the last program run
                    returned an exit code equal to or greater than the number
                    specified.

通常你只需要切换分支:

if errorlevel 1 (echo 6) else (echo 5)

在您的情况下,我还建议您使用括号分组语句:

for %%X in (1) do (
  fc %%X-a.txt %%X-b.txt > tmp.txt
  if errorlevel 1 (echo 6) else (echo 5)
  echo 7
)

作为程序调用后显式if的另一个选项,还有运算符根据前一个命令的结果运行另一个命令:

fc %%X-a.txt %%X-b.txt > tmp.txt && echo 5 || echo 6