2016-08-01 156 views
0

如果我有這樣的doit.bat腳本:set命令完成運行

@echo off 
set MY_VAL=3 
echo %MY_VAL% 

然後:

> doit 
3 
> echo %MY_VAL% 
3 

換句話說,默認情況下set命令仍然存在變數呼叫環境。這與Unix不同,您必須使用source腳本才能實現此目的。

我試圖找出如何能夠做到以下幾點:

  • 設置變量在.bat腳本,但沒有讓他們堅持到環境中的腳本完成後 - 也就是有Windows行爲更像是Unix。
  • 與此同時,我仍然希望在運行.bat腳本時爲任何分叉的環境設置這些變量 - 即等效於通過Unix export命令設置變量。

有沒有辦法做到這一點,要麼通過其他cmd命令或一些選項set?我搜索和文檔,但找不到任何東西。

+1

請仔細閱讀標籤信息應用標籤之前!我相當肯定你沒有使用MS - ** DOS **,是嗎?無論如何,對於你的第一點(本地化環境),你正在尋找的命令是'setlocal'和'endlocal';所以通常在批處理文件('@echo off'下面)有一個'setlocal'命令; 'endlocal'被認爲是可選的,因爲在批處理文件被終止時有一個隱式的'endlocal'。對於你的第二點(分叉環境),沒有本地命令來完成...... – aschipfl

回答

1
==> SETLOCAL /? 
Begins localization of environment changes in a batch file. Environment 
changes made after SETLOCAL has been issued are local to the batch file. 
ENDLOCAL must be issued to restore the previous settings. When the end 
of a batch script is reached, an implied ENDLOCAL is executed for any 
outstanding SETLOCAL commands issued by that batch script. 
… 

或讀取SETLOCAL: Set options to control the visibility of environment variables in a batch file

你可以使用未來doit.bat腳本:

@echo off 
SETLOCAL 
set MY_VAL=3 
echo %MY_VAL%