と という 2 つのバッチ ファイルがあり、foo.bat
次bar.bat
の場所にあるとします。
root\foo.bat
root\grub\bar.bat
また、両方のファイルに、次のように変数を設定する行が含まれているとします。
set PWD=%cd%
ここで、foo.bat
を呼び出すと.\grub\bar.bat
、で設定された変数がbar.bat
上書きされますか?PWD
foo.bat
答え1
実験を実行しました。 の環境変数を変更すると、bar.bat
も変更されます。コマンド (ではなく)foo.bat
を使用して設定された環境変数はコマンド セッションにスコープされるため、これは予想どおりの結果だと思います。set
setx
答え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>