バッチファイルでの変数の定義と使用


450

バッチファイルで変数を定義して使用しようとしています。シンプルなようです:

@echo off

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

私が得る出力は次のとおりです:

We're working with ""

何が起きてる?なぜ変数がエコーされないのですか?

回答:


552

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


7
前のスペース=が名前の一部として解釈される場合、変数として参照できず%location%、として参照する必要があります%location %。それはタイプミスですか?
悲惨な変数

7
@Miserable変数:そのとおりです。元の答えが誤った編集の犠牲になったようです。
ブライアンニクソン

18
これが、MSに付属しているものです
ファラケ2015

5
@ファラケalias x = y*ニクスランドとは対照的に?
基本的な

1
@Falaqueでは、bashを実行するとどうなると思いますx = yか?
phuclv

263

スペースは重要です。あなたは、という名前の変数を作成'location ' の値とを
' "bob"'注-スペースの場所を示すために、単一引用符で囲むことが追加されました。

値に引用符が必要な場合、コードは次のようになります。

set location="bob"

引用符が不要な場合、コードは次のようになります。

set location=bob

またはもっと良い

set "location=bob"

最後の構文は、不注意による後続スペースが値に入るのを防ぎ、また、& |などの特殊文字から保護します。


8
最後の構文には欠点がありますか?
Wolf

8
@Wolf-いいえ、欠点はありません。ただし、最も効果的な時期には制限があります。値に引用符が含まれていない限り、エスケープを心配することなく、ほとんどすべての文字を値に含めることができます。例外は%、おそらく!遅延拡張が有効になっている場合。値は引用符が含まれていない場合でも、その後、次のような毒の文字エスケープする際に心配しなければならない|&など
dbenham

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

1
@Wolf、確認する必要があるのはコマンド拡張機能が有効になっていることだけですが、いずれにしてもこれがデフォルトの構成です...
aschipfl

7

入力 location.bat

@echo off
cls

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

出力

We're working with bob

(uは行わミス:space" "


4
set /pユーザーにプロンプ​​トを表示し、指定された変数に回答を保存します。例set /p name="What is your name? " & echo Hello, %name%.
ロバートムーニー

6
-1、構文set /p "varname"="text"が間違っている、という名前の変数が作成されますlocation"(末尾に引用符が付いています!)。それはあるはずですset /p location="bob"。しかし、それでも、それはもう質問と一致しません
jeb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.