呼叫的批次檔之間的變數名稱

呼叫的批次檔之間的變數名稱

假設我有兩個批次檔foo.batbar.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>

相關內容