2012-11-06 108 views
0

我正在運行以下cmd來設置我的系統環境變量。更新路徑而不是覆蓋cmd

call C:\Windows\system32>reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 
\Session Manager\Environment" /v JAVA_HOME /t REG_EXPAND_SZ /d "C:\Program Files\Java 
\jdk1.6.0_37" 

我想做的事與我的路徑類似的東西,但我不希望覆蓋已存在的價值,我只是要添加到他們。將運行上面的命令覆蓋或更新?如果它覆蓋了我將如何得到它來更新呢?

+0

當然你可以在高級系統設置中改變'Path'?但我可能會忽略這一點。 – 2012-11-06 20:22:00

+0

對於1臺計算機來說這很簡單,但我在多臺機器上設置了多個變量。試圖通過編寫一個批處理腳本來節省一些時間。 –

+0

如果這些機器是域的成員,[組策略首選項](http://technet.microsoft.com/en-us/library/cc772047.aspx)可以說是處理這種情況的最佳方式。 –

回答

0

是的,REG ADD會覆蓋現有的值,但我寫了一個腳本,應該可以幫助你。

請注意delims=之後的字符:這些不是空格,它是單個製表符(ASCII#9)。

@ECHO OFF 
REM Declare all variables as local. 
SETLOCAL 

SET GET_PATH=REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path 
SET SET_PATH=REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d 

REM Get %PATH% from registry and filter REG output (drop all but actual %PATH% value). 
FOR /F "tokens=3* delims= " %%P IN ('%GET_PATH% ^| FINDSTR Path') DO SET RESULT=%%P 

REM Check for the trailing semicolon. 
IF "%RESULT:~-1%" == ";" (SET SEMICOLON=) ELSE (SET SEMICOLON=;) 

REM Add new directories to %PATH%. 
SET DIRS=C:\Foo\Bar;E:\Bar\Baz 
SET RESULT=%RESULT%%SEMICOLON%%DIRS% 

REM Save result to the registry. 
%SET_PATH% "%RESULT%" 
相關問題