呼び出されたバッチファイル間の変数名

呼び出されたバッチファイル間の変数名

と という 2 つのバッチ ファイルがあり、foo.batbar.batの場所にあるとします。

root\foo.bat
root\grub\bar.bat

また、両方のファイルに、次のように変数を設定する行が含まれているとします。

set PWD=%cd%

ここで、foo.batを呼び出すと.\grub\bar.bat、で設定された変数がbar.bat上書きされますか?PWDfoo.bat

答え1

実験を実行しました。 の環境変数を変更すると、bar.batも変更されます。コマンド (ではなく)foo.batを使用して設定された環境変数はコマンド セッションにスコープされるため、これは予想どおりの結果だと思います。setsetx

答え2

おっしゃるとおり、スコープはグローバル/変数は共有されます。つまり、あなたの言うとおりです。

また、setx を使用すると、レジストリ内にあるため、次の cmd セッションと将来のセッションで機能します。ただし、set と setx はスコープの議論では比較されません。環境変数は一般にグローバルです。ただし、バッチ ファイルの開始時に setlocal を使用すると、そこで設定された変数はローカルのままになります。

C:\DOCUME~1\bob>type n.bat <ENTER>
setlocal
set a=99

C:\DOCUME~1\bob>echo %a% <ENTER>
%a%

C:\DOCUME~1\bob>n <ENTER>

C:\DOCUME~1\bob>setlocal

C:\DOCUME~1\bob>set a=99

C:\DOCUME~1\bob>echo %a% <ENTER>
%a%

C:\DOCUME~1\bob>

関連情報