
我正在嘗試編寫這段程式碼:
If %dropmode%==on (
If %drop% LEQ %potiondrop% (
set /a potion=%potion%+1
)
If %drop2% LEQ %potiondrop% (
set /a potion=%potion%+1
)
)
因此,條件「if %drop2% LEQ %potiondrop%」不起作用,但「if %drop% LEQ %potiondrop%」起作用。怎麼辦?
答案1
問題是 Windows 命令提示字元/命令列解釋器 (CLI)(稱為 CMD.EXE)有一個錯誤(嗯,我確信 Microsoft 認為這是一個功能),其中,當它讀取類似IF … ( … )
或一個FOR
循環,它解釋所有%variable_name%
變數立即地,在執行循環或區塊之前。在您的範例中,potion
當您輸入區塊時 if 為 0 If %dropmode%==on ( … )
,則該區塊內所有出現的 的%potion%
計算結果都為 0,因此您的兩個set
語句都被處理為set /a potion=0+1
,即使您potion
在區塊內進行了更改。從您報告的螢幕輸出中可以明顯看出這一點。
修復方法是告訴 CMD 允許在執行引用變數的語句時在正確的時間擴展變數。您可以透過添加來做到這一點
setlocal enabledelayedexpansion
靠近批次檔開頭的某個位置,並將計數程式碼變更為如下所示
set /a potion=!potion!+1
使用表單啟動延遲擴充。請參閱和了解更多資訊。!variable_name!
SET /?
SETLOCAL /?
%
PS 另一種解決方案是簡單地從語句中刪除字元set
並說
set /a potion=potion+1