2012-06-28 147 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」 –