2016-09-05 3 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%[missing operator here]%Spread% 'に設定しようとします。 – Stephan

+1

算術演算には '/ a'はありませんか? '/ a'を残しておけば、問題を解決できるかどうか? 'set /?'は、引数が大文字と小文字を区別しない数値でなければならないことを示します。 – geisterfurz007

+0

「行方不明者」という意味はどうですか?それはエラーメッセージですか? –

答えて

0

コマンドプロンプトウィンドウを開き、set /?を実行し、すべてのヘルプページをコンソールウィンドウに出力します。

オプション/Aは算術式用であり、環境変数に文字列値を割り当てることは決してしないでください。環境変数は常にstring型です。ライン上

set /a partner=Ignite 

Windowsコマンド・プロセッサは、整数値に変換文字列の値が変数partnerに割り当てなければならない環境変数の名前としてIgnite解釈は、文字列の整数から戻って変換されます。変数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変数環境がバッチユーザーの場合のデフォルト値はちょうどRETURNまたはは全く何も入力せずにをENTER当たると定義されています。この場合、環境変数confirmは現在の値を保持するか、前に定義されていない場合は未定義です。

IFオプション/Iのため、文字列比較が大文字と小文字を区別しません。このコマンドのヘルプについては、コマンドプロンプトウィンドウif /?で実行してください。

遅延比較を使用して文字列の比較が行われます。これは、バッチユーザーが誤ってまたは意図的にたとえば"<のように入力し、遅延拡張を使用せずに文字列比較を行うことができるため、セキュリティのためです。構文エラーが原因でバッチ処理が最初にIFの条件行ですぐに終了します。

文字列を比較するときは、必ず一重引用符ではなく二重引用符を使用してください。二重引用符は、IFの条件を評価する際にWindowsコマンドプロセッサに特別な意味を持ちますが、一重引用符はありません。文字'は、文字または数字のような==との文字列比較で解釈されますが、特別な意味はありません。しかし、Windowsコマンドプロセッサーは、==の左右の文字列を二重引用符で囲んで比較しています。double quotes内の文字列は比較されませんが、二重引用符がある文字列はif /I "!confirm!" == yを意味しません。

回答も参照してくださいHow to set environment variables with spaces?

+0

ありがとうMofiそれは動作します! – Markab1

関連する問題