2013-09-05 72 views
0

我有這個批處理文件:批處理文件意外行爲

for /L %%n in (1,1,10) do (

set a = %%n 
echo %%n 
echo %a% 
) 

當我們運行這個%%n正確顯示爲1,2,3,... 10

a總是顯示爲10:10 ,10,10,...,10

是什麼原因?

回答

2

您需要使用延遲擴展。在FOR或IF中,變量在命令執行之前而不是在執行期間「擴展」。 (expanded =變量被其值取代)

爲了更改變量的值並在同一個循環中使用它,您應該使用延遲表達式。

您必須在代碼的開頭寫入SETLOCAL ENABLEDELAYEDEXPANSION,並且應該延遲擴展的變量應該用感嘆號而不是百分號包圍。

所以echo %a%成爲echo !a!

編輯

此外,您set a = %%n是無效的,因爲你在變量 「a」,而不是 「一」 影響n的值。

你必須寫set a=%%n(不帶空格等號SIGNE之前)

+0

回聲!一!只是顯示!!! –

+0

@SNash該集合無效,我很想念這個。現在已經糾正了。 – Julien

+0

問題出現在a = %% n之前 –