2016-09-05 37 views
-1

我正在做一個遊戲,並且對於set /a "var",var變成0並且缺少運算符。設置/一個變量和變量變爲0缺少運算符

這是一段代碼

set /p confirm=y/n : 
if '%confirm%' == 'y' (
set /a partner=Ignite 
set /a monsterlevel=5 
set /a reqexp=100 
set /a currentexp=0 
set /a element=Fire 
set /a evolution=Igneous 
set /a move1=Scratch 
set /a move2=Burn 
set /a move3=Flame Spread 
set /a move4=Quick Slash 
set /a hp=100 
goto mymonster 
) 
if '%confirm%' == 'n' goto pick 

我該如何解決這個問題?

+2

爲什麼要使用'/ a'? 'set/a partner = Ignite'將'%partner%'設置爲'%Ignite%'的值,該值爲空。 'set/a move3 = Flame Spread'嘗試將'%move3%'設置爲'%flame%[此處缺少操作符]%Spread%'。 – Stephan

+1

算術用途不是'/ a'嗎?意思是把'/ a'離開應該可以解決問題嗎? 'set /?'告訴你參數必須是一個數值,而不是這種情況。 – geisterfurz007

+0

「你是否也缺少操作員」是什麼意思?這是一條錯誤消息嗎? –

回答

0

打開命令提示符窗口,運行set /?並讀取輸出到控制檯窗口的所有幫助頁面。

選項/A用於算術表達式,不應該用於將字符串值分配給環境變量。環境變量始終是字符串類型。

在線路

set /a partner=Ignite 

Windows命令處理器解釋Ignite作爲轉換爲一個整數值字符串值應分配給變量partner環境變量的名稱轉換回從整數到字符串。由於極有可能沒有變量Ignite,所以值0被分配給partner作爲字符串。

上線

set /a move3=Flame Spread 

Windows命令處理器解釋FlameSpread作爲環境變量的名稱。但是之間沒有操作符,因此算術表達式由於缺少操作符而無效。

解決辦法:

@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環境與批量用戶的情況下,只需點擊RETURNENTER,而完全不輸入任何定義默認值。在這種情況下,環境變量confirm保持其當前值,或者如果以前未定義,則仍然未定義。

由於IF選項/I,字符串比較不區分大小寫。在命令提示符窗口if /?中運行以獲取有關此命令的幫助。

字符串比較使用延遲擴展完成。這是爲了安全,因爲批處理用戶可能錯誤地或有意地輸入,例如"<,並且現在不使用延遲擴展進行字符串比較,批處理將首先立即退出IF條件行,因爲語法錯誤。

在比較字符串時總是使用雙引號而不是單引號。雙引號對於Windows命令處理器在評估IF條件時具有特殊含義,但單引號不包含。字符'被解釋爲與字母或數字字符串比較==,它沒有特殊含義。但是請注意,Windows命令處理器將==左右的字符串與包含雙引號的字符串進行比較。因此,不要將雙引號內的字符串進行比較,但帶雙引號的字符串(即if /I "!confirm!" == y)永遠不會是真的。

請參閱How to set environment variables with spaces?的回答

+0

非常感謝Mofi它的作品! – Markab1