2016-11-10 129 views
0

當運行首次通過CMD下面的批處理文件,我希望它打印出來correct而是再次打印出error嵌套if語句在批處理工作不正常

@echo off 
SET /p var1="Enter 1 " 
IF "%var1%"=="1" (
SET /p var2="Enter 1 " 
IF "%var2%"=="1" (
    echo correct 
) ELSE (
echo error 
) 
) 

當運行它每次都打印出相同的CMD會話correct。我錯過了什麼讓它第一次打印出correct

+2

可能重複的[批量嵌套如果語句錯誤與未定義的變量](http://stackoverflow.com/questions/35267196/batch-nested-if-statement-error-with-not-defined-variables) – aschipfl

回答

1

看一看delayed expansion

每當你括號的一個封閉的塊中改變一個變量的值,你必須

1)將setlocal EnableDelayedExpansion在腳本的開始(共同的地方是下@echo off一行)和
2)將%myVar%更改爲!myVar!

我假設你的程序的行爲像它一樣,因爲cmd窗口「保存」了變量的值。您可以嘗試使用兩個值1來運行它,並且會像您所說的那樣返回error。在下一次運行中給出程序1和2,它仍然會說正確的。

延遲是必要的,因爲if語句的整個塊是一次計算的 - >在沒有延遲擴展的情況下更改一個值不會像之前計算的那樣。
但是,如果延遲展開,則告訴程序,當它到達那裏時,必須再次計算該零件。

+1

當然。由於在例程開始時沒有'setlocal',所以在過程結束後所做的任何更改都會保留,所以'var2'被設置爲第二次運行開始時第一次運行時輸入的值。出於這個原因,通常以'setlocal'開頭,這可以確保當過程結束時,對環境所做的任何更改都會被丟棄。 – Magoo

+0

@Magoo感謝您的澄清!這也有助於我理解。 – geisterfurz007

+0

@TonyJ很高興聽到! – geisterfurz007