2014-09-10 115 views
1

我有以下批處理文件來設置所需的環境變量:批處理文件需要三個運行正確設置環境變量

setx -m APPS_DRIVE "E:" 
setx -m APPS_HOME "%APPS_DRIVE%\Apps" 
setx -m DOMINO_HOME "%APPS_DRIVE%\Lotus\Domino" 
setx -m PRODUCT_HOME "%APPS_DRIVE%\Product" 
setx -m JAVA_HOME "%APPS_HOME%\Java\jdk1.6.0_45" 

這裏的問題是,我需要運行該批處理文件三次有所有變量設置正確。在第一次運行時,只有APPS_DRIVE被設置爲E:\

像APPS_HOME其他人,例如顯示爲\ APPS

然後在第二輪,我APPS_HOME被設置正確,但是沒有其他3.在第三次運行中,所有變量都被正確反映。

我看到命令行正在做什麼,我只是不明白爲什麼?由於這些命令依次執行,一個接一個地執行。

這是預期的行爲?如果是這樣,是否有任何解決方法?

謝謝。

回答

1

Setx更新註冊表,但cmd.exe在啓動時從註冊表獲取信息。 所以SETX效果是重新啓動命令後可見prompt.But你可以試試這個:

setx -m APPS_DRIVE "E:" & set "APPS_DRIVE=E:" 
setx -m APPS_HOME "%APPS_DRIVE%\Apps" & set "APPS_HOME=%APPS_DRIVE%\Apps" 
setx -m DOMINO_HOME "%APPS_DRIVE%\Lotus\Domino" 
setx -m PRODUCT_HOME "%APPS_DRIVE%\Product" 
setx -m JAVA_HOME "%APPS_HOME%\Java\jdk1.6.0_45" 

或者尤爲明顯:

if not defined APPS_DRIVE (
     setx -m APPS_DRIVE "E:" & set "APPS_DRIVE=E:" 
) 

等了每個變量

+0

感謝您的解釋。由於APPS_DRIVE和APPS_HOME是兩個關鍵目錄,因此我認爲我只會爲它們添加&,對嗎?因爲其餘的都依賴於這兩個。我會測試它並讓你知道。 – Sid 2014-09-10 12:52:21

+0

@Sid - 是的。我編輯了我的答案。 – npocmaka 2014-09-10 12:55:39

+0

工程就像一個魅力。我幾乎在那裏看起來像,我認爲需要設置會話相關的變量,所以我使用了setx而不是setx -m。謝謝你的幫助。 PS:在第一行有一個輕微的錯字,其中set是引號的一部分。 – Sid 2014-09-10 13:06:14

0

其實,如果你發出setx -m APPS_HOME "%APPS_DRIVE%\Apps"雖然APPS_DRIVE尚未在當前會話中定義,但註冊表中的變量將設置爲該確切字符串,而不會擴展%APPS_DRIVE%這是一件好事!在您的下一次登錄時,所有變量都是正確的,只要更改其他人蔘考的APPS_DRIVE即可更改所有變量的驅動器。

+0

謝謝你。但是,這在服務器機器上不會太有用嗎?由於它幾乎沒有重新啓動過,並且這些設置需要在服務器啓動時完成。我希望我在那裏有意義。 – Sid 2014-09-10 13:56:15

相關問題