假設我有兩個批次檔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 會話和未來的 cmd 會話,因為它位於登錄中。環境變數通常是全域的。但是您可以在開始時在批次檔中使用 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>