打開命令提示符窗口,運行set /?
並讀取輸出到控制檯窗口的所有幫助頁面。
選項/A
用於算術表達式,不應該用於將字符串值分配給環境變量。環境變量始終是字符串類型。
在線路
set /a partner=Ignite
Windows命令處理器解釋Ignite
作爲轉換爲一個整數值字符串值應分配給變量partner
環境變量的名稱轉換回從整數到字符串。由於極有可能沒有變量Ignite
,所以值0被分配給partner
作爲字符串。
上線
set /a move3=Flame Spread
Windows命令處理器解釋Flame
和Spread
作爲環境變量的名稱。但是之間沒有操作符,因此算術表達式由於缺少操作符而無效。
解決辦法:
@echo off
setlocal EnableDelayedExpansion
set "confirm=n"
set /P "confirm=y/n : "
if /I "!confirm!" == "y" (
set "partner=Ignite"
set "monsterlevel=5"
set "reqexp=100"
set "currentexp=0"
set "element=Fire"
set "evolution=Igneous"
set "move1=Scratch"
set "move2=Burn"
set "move3=Flame Spread"
set "move4=Quick Slash"
set "hp=100"
goto mymonster
)
if /I "!confirm!" == "n" goto pick
rem The user has entered whether y/Y nor n/N. What to do now?
變量confirm
環境與批量用戶的情況下,只需點擊RETURN或ENTER,而完全不輸入任何定義默認值。在這種情況下,環境變量confirm
保持其當前值,或者如果以前未定義,則仍然未定義。
由於IF選項/I
,字符串比較不區分大小寫。在命令提示符窗口if /?
中運行以獲取有關此命令的幫助。
字符串比較使用延遲擴展完成。這是爲了安全,因爲批處理用戶可能錯誤地或有意地輸入,例如"<
,並且現在不使用延遲擴展進行字符串比較,批處理將首先立即退出IF條件行,因爲語法錯誤。
在比較字符串時總是使用雙引號而不是單引號。雙引號對於Windows命令處理器在評估IF條件時具有特殊含義,但單引號不包含。字符'
被解釋爲與字母或數字字符串比較==
,它沒有特殊含義。但是請注意,Windows命令處理器將==
左右的字符串與包含雙引號的字符串進行比較。因此,不要將雙引號內的字符串進行比較,但帶雙引號的字符串(即if /I "!confirm!" == y
)永遠不會是真的。
請參閱How to set environment variables with spaces?的回答
爲什麼要使用'/ a'? 'set/a partner = Ignite'將'%partner%'設置爲'%Ignite%'的值,該值爲空。 'set/a move3 = Flame Spread'嘗試將'%move3%'設置爲'%flame%[此處缺少操作符]%Spread%'。 – Stephan
算術用途不是'/ a'嗎?意思是把'/ a'離開應該可以解決問題嗎? 'set /?'告訴你參數必須是一個數值,而不是這種情況。 – geisterfurz007
「你是否也缺少操作員」是什麼意思?這是一條錯誤消息嗎? –