2010-10-16 77 views
10
@echo off 
SET first=0 
FOR %%N IN (hello bye) DO (
SET first=1 
echo %first% 
echo %%N 
) 

看來變量「first」始終是0.爲什麼?爲什麼這個批處理變量即使設置也不會改變?

+0

可能重複的[Windows批處理變量不會設置](https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) – 2018-03-11 01:24:47

回答

20

使用批處理文件時,讀取命令時會擴展變量 - 因此只要執行for即可。在那一點上,它不再說echo %first%,它實際上說echo 0,因爲這是在擴張點的價值。

爲了解決這個問題,你需要用!而不是%來包圍變量名稱來使用延遲擴展 - 這樣的話就是echo !first!。這可能要求您使用/ V參數啓動cmd.exe,或者在批處理文件的開頭(在echo off之後)使用setlocal enabledelayedexpansion

如果你輸入set /?,你會在輸出結尾看到更詳細的解釋。

相關問題