バッチファイルで変数を宣言して使用しようとしています。シンプルであるように見えます。Windowsバッチファイル(.BAT)で変数を宣言して使用する
@ECHO OFF
SET location = "bob"
ECHO We're working with "%location%"
私が手出力は次のようになります。
We're working with ""
はここで何が起こっているの?変数がechoされないのはなぜですか?
バッチファイルで変数を宣言して使用しようとしています。シンプルであるように見えます。Windowsバッチファイル(.BAT)で変数を宣言して使用する
@ECHO OFF
SET location = "bob"
ECHO We're working with "%location%"
私が手出力は次のようになります。
We're working with ""
はここで何が起こっているの?変数がechoされないのはなぜですか?
=
の前のスペースは名前の一部として解釈され、その後のスペース(引用符と同様)は値の一部として解釈されます。したがって、作成した変数は%location %
で参照できます。それがあなたが望むものでなければ、定義の余分なスペースを削除してください。
スペースは重要です。値が' "bob"'
の'location '
という名前の変数を作成しました。
あなたの価値の引用符をしたい場合は、あなたのコードは、あなたが引用符をしたくない場合は、あなたのコードは
set location=bob
いっそ
のようになりますset location="bob"
のようになります。
set "location=bob"
最後の構文は、不注意なスペースの値の取得を防止し、また、 tのような特殊文字は&のようです。など
最後の構文の欠点はありますか? – Wolf
@Wolf - いいえ、欠点はありません。しかし、それが最も効果的なときには限界があります。値に引用符が含まれていない限り、エスケープすることを心配することなく、ほぼすべての文字を値に含めることができます。遅延拡張が有効になっている場合、例外は '%'、可能であれば '!'です。しかし値に引用符が含まれている場合は、 '|'、 '&'などの有害な文字をいつエスケープするかについて心配する必要があります。 – dbenham
これはWindowsの環境変数を設定するのと同じようです。これは、バッチスクリプトでローカル変数を使用する唯一の方法ですか? – parasrish
入力location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
出力
We're working with bob
(uは行わミス:space
と" "
)
おかげブライアン。問題が解決しました。 –
'='の前のスペースが名前の一部として解釈された場合、変数*は '%location%'として参照することはできません。 '%location%'として参照する必要があります。それはタイプミスですか? –
@Miserable変数:そうです。元の回答が間違った編集の犠牲者になったようです。 –