2012-06-28 148 views
0

所以我一直试图弄清楚这一点,但没有任何东西出现在我的面前。我已经把它缩小到一个小案子,所以请让我知道你的想法。Windows BAT - IF语句在FOR循环中失败

我所拥有的文件(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被完全忽略。

有什么想法?

+0

经验法则 - 如果你发现自己需要不止一个简单的循环......或任何类型的控制结构或数据操作......然后运行!不要走到......最近的脚本语言。 Powershell,Perl,VBscript ... ANYING,但是一个.bat文件。恕我直言... – paulsm4

+0

我知道,但我只是想增加我的知识,成为一个更好的程序员; D – Amil

回答

2

if errorlevel当错误水平至少 0它总是一个更大的是真实的大于或等于比较:

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 
+0

很感谢!任何想法为什么我的“回声7”从来没有运行在以前的.bat脚本? – Amil

+2

您的if语句的格式为“if a then b else c&d”。这被解释为“如果一个then(b)else(c&d)”。只有a是假的,d语句才会被执行,这从来就不是这样。如果您将if语句放在括号中,echo 7将会运行:“(如果errorlevel 0(echo 5)else(echo 6))&echo 7” –