2012-05-11 13 views
304

バッチファイルで変数を宣言して使用しようとしています。シンプルであるように見えます。Windowsバッチファイル(.BAT)で変数を宣言して使用する

@ECHO OFF 

SET location = "bob" 
ECHO We're working with "%location%" 

私が手出力は次のようになります。

We're working with "" 

はここで何が起こっているの?変数がechoされないのはなぜですか?

答えて

398

=の前のスペースは名前の一部として解釈され、その後のスペース(引用符と同様)は値の一部として解釈されます。したがって、作成した変数は%location %で参照できます。それがあなたが望むものでなければ、定義の余分なスペースを削除してください。

+0

おかげブライアン。問題が解決しました。 –

+5

'='の前のスペースが名前の一部として解釈された場合、変数*は '%location%'として参照することはできません。 '%location%'として参照する必要があります。それはタイプミスですか? –

+6

@Miserable変数:そうです。元の回答が間違った編集の犠牲者になったようです。 –

188

スペースは重要です。値が' "bob"''location 'という名前の変数を作成しました。

あなたの価値の引用符をしたい場合は、あなたのコードは、あなたが引用符をしたくない場合は、あなたのコードは

set location=bob 

いっそ

のようになります

set location="bob" 

のようになります。

set "location=bob" 

最後の構文は、不注意なスペースの値の取得を防止し、また、 tのような特殊文字は&のようです。など

+2

最後の構文の欠点はありますか? – Wolf

+1

@Wolf - いいえ、欠点はありません。しかし、それが最も効果的なときには限界があります。値に引用符が含まれていない限り、エスケープすることを心配することなく、ほぼすべての文字を値に含めることができます。遅延拡張が有効になっている場合、例外は '%'、可能であれば '!'です。しかし値に引用符が含まれている場合は、 '|'、 '&'などの有害な文字をいつエスケープするかについて心配する必要があります。 – dbenham

+1

これはWindowsの環境変数を設定するのと同じようです。これは、バッチスクリプトでローカル変数を使用する唯一の方法ですか? – parasrish

4

入力location.bat

@echo off 
cls 

set /p "location"="bob" 
echo We're working with %location% 
pause 

出力

We're working with bob 

(uは行わミス:space" "

関連する問題