バッチファイルで変数を定義して使用しようとしています。シンプルなようです:
@echo off
set location = "bob"
echo We're working with "%location%"
私が得る出力は次のとおりです:
We're working with ""
何が起きてる?なぜ変数がエコーされないのですか?
バッチファイルで変数を定義して使用しようとしています。シンプルなようです:
@echo off
set location = "bob"
echo We're working with "%location%"
私が得る出力は次のとおりです:
We're working with ""
何が起きてる?なぜ変数がエコーされないのですか?
回答:
スペースは重要です。あなたは、という名前の変数を作成'location '
の値とを
' "bob"'
。注-スペースの場所を示すために、単一引用符で囲むことが追加されました。
値に引用符が必要な場合、コードは次のようになります。
set location="bob"
引用符が不要な場合、コードは次のようになります。
set location=bob
またはもっと良い
set "location=bob"
最後の構文は、不注意による後続スペースが値に入るのを防ぎ、また、&
|
などの特殊文字から保護します。
%
、おそらく!
遅延拡張が有効になっている場合。値は引用符が含まれていない場合でも、その後、次のような毒の文字エスケープする際に心配しなければならない|
、&
など
入力 location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
出力
We're working with bob
(uは行わミス:space
と" "
)
set /p
ユーザーにプロンプトを表示し、指定された変数に回答を保存します。例set /p name="What is your name? " & echo Hello, %name%.
set /p "varname"="text"
が間違っている、という名前の変数が作成されますlocation"
(末尾に引用符が付いています!)。それはあるはずですset /p location="bob"
。しかし、それでも、それはもう質問と一致しません
=
が名前の一部として解釈される場合、変数はとして参照できず%location%
、として参照する必要があります%location %
。それはタイプミスですか?