若是修改或添加環境變量,則必須從新啓動命令提示符。 我是否能夠執行一個無需重啓CMD便可執行的命令? 編程
我想到的最好的方法是隻執行一個註冊表查詢。 這是個人例子。 windows
在個人示例中,我使用添加了新環境變量的批處理文件進行了安裝。 安裝完成後,我須要當即執行此操做,可是沒法使用這些新變量生成新進程。 我測試了生成另外一個瀏覽器窗口並調用cmd.exe的方法,此方法能夠正常工做,但在Vista和Windows 7上,資源管理器僅做爲單個實例運行,而且一般以登陸用戶身份運行。因爲我須要管理員權限才能自動執行操做,所以失敗不管從本地系統運行仍是以管理員身份運行,均可以執行此操做。 這樣作的侷限性在於它不能處理路徑之類的問題,只能用於簡單的環境變量。 這使我可使用批處理轉到目錄(包含空格)並複製運行.exes等文件。這是今天從stackoverflow.com上的may資源編寫的 瀏覽器
對新批次的原始批次調用: dom
testenvget.cmd SDROOT(或任何變量) 工具
@ECHO OFF setlocal ENABLEEXTENSIONS set keyname=HKLM\System\CurrentControlSet\Control\Session Manager\Environment set value=%1 SET ERRKEY=0 REG QUERY "%KEYNAME%" /v "%VALUE%" 2>NUL| FIND /I "%VALUE%" IF %ERRORLEVEL% EQU 0 ( ECHO The Registry Key Exists ) ELSE ( SET ERRKEY=1 Echo The Registry Key Does not Exist ) Echo %ERRKEY% IF %ERRKEY% EQU 1 GOTO :ERROR FOR /F "tokens=1-7" %%A IN ('REG QUERY "%KEYNAME%" /v "%VALUE%" 2^>NUL^| FIND /I "%VALUE%"') DO ( ECHO %%A ECHO %%B ECHO %%C ECHO %%D ECHO %%E ECHO %%F ECHO %%G SET ValueName=%%A SET ValueType=%%B SET C1=%%C SET C2=%%D SET C3=%%E SET C4=%%F SET C5=%%G ) SET VALUE1=%C1% %C2% %C3% %C4% %C5% echo The Value of %VALUE% is %C1% %C2% %C3% %C4% %C5% cd /d "%VALUE1%" pause REM **RUN Extra Commands here** GOTO :EOF :ERROR Echo The the Enviroment Variable does not exist. pause GOTO :EOF
我還從各類不一樣的想法中想到了另外一種方法。 請看下面。 基本上,這將從註冊表中獲取最新的路徑變量,可是,這將致使許多問題,由於註冊表查詢自己將提供變量,這意味着處處都有變量將不起做用,所以請解決這個問題基本上使路徑加倍。 真討厭 更合適的方法是:設置路徑=%Path%; C:\\ Program Files \\ Software .... \\ 測試
不管這是新的批處理文件,請謹慎使用。 spa
@ECHO OFF SETLOCAL ENABLEEXTENSIONS set org=%PATH% for /f "tokens=2*" %%A in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^|FIND /I "Path"') DO ( SET path=%%B ) SET PATH=%org%;%PATH% set path
使用「 setx」並從新啓動cmd提示符 命令行
有一個名爲「 setx 」的命令行工具可用於此做業。 它用於讀取和寫入環境變量。 關閉命令窗口後,變量仍然存在。 設計
它「無需編程或編寫腳本便可在用戶或系統環境中建立或修改環境變量。setx命令還檢索註冊表項的值並將其寫入文本文件。」 code
注意:此工具建立或修改的變量將在之後的命令窗口中可用,但在當前的CMD.exe命令窗口中不可用。 所以,您必須從新啓動。
若是缺乏setx
:
或修改註冊表
MSDN說:
要以編程方式添加或修改系統環境變量,請將它們添加到HKEY_LOCAL_MACHINE \\ System \\ CurrentControlSet \\ Control \\ Session Manager \\ Environment註冊表項中,而後廣播將lParam設置爲字符串「 Environment 」的WM_SETTINGCHANGE消息。
這使應用程序(例如外殼程序)能夠獲取您的更新。
或者您能夠經過手動進行操做
要查看或更改環境變量:右鍵單擊「個人電腦」,而後單擊「屬性」。 單擊高級選項卡。 單擊環境變量。 爲用戶或系統變量單擊如下選項之一:單擊「新建」以添加新的變量名稱和值。 單擊一個現有的變量,而後單擊「編輯」以更改其名稱或值。 單擊一個現有的變量,而後單擊刪除將其刪除。 http://support.microsoft.com/kb/310519
Windows XP環境變量
%ALLUSERSPROFILE% (%PROGRAMDATA%) C:\Documents and Settings\All Users %APPDATA% C:\Documents and Settings\{username}\Application Data %COMPUTERNAME% {computername} %COMMONPROGRAMFILES% C:\Program Files\Common Files %COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files %COMSPEC% C:\Windows\System32\cmd.exe %HOMEDRIVE% C: %HOMEPATH% \Documents and Settings\{username} %LOCALAPPDATA% Not available %LOGONSERVER% \\{domain_logon_server} %PATH% C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;{plus program paths} %PATHEXT% .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.WSF;.WSH %PROGRAMFILES% C:\Program Files %PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version) %PROMPT% Code for current command prompt format. Code is usually $P$G %SystemDrive% C: %SystemRoot% The Windows directory, usually C:\Windows, formerly C:\WINNT %TEMP% and %TMP% C:\Documents and Settings\{username}\Local Settings\Temp %USERDOMAIN% {userdomain} %USERNAME% {username} %USERPROFILE% C:\Documents and Settings\{username} %WINDIR% C:\Windows %PUBLIC% %PROGRAMDATA% Only available in Windows Vista and newer versions %PSModulePath%
Windows 7環境變量
%ALLUSERSPROFILE% (%PROGRAMDATA%) C:\ProgramData %APPDATA% C:\Users\{username}\AppData\Roaming %COMPUTERNAME% {computername} %COMMONPROGRAMFILES% C:\Program Files\Common Files %COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files %COMSPEC% C:\Windows\System32\cmd.exe %HOMEDRIVE% C: %HOMEPATH% \Users\{username} %LOCALAPPDATA% C:\Users\{username}\AppData\Local %LOGONSERVER% \\{domain_logon_server} %PATH% C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;{plus program paths} %PATHEXT% .com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh;.msc %PROGRAMFILES% C:\Program Files %PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version) %PROMPT% Code for current command prompt format. Code is usually $P$G %SystemDrive% C: %SystemRoot% C:\Windows %TEMP% and %TMP% C:\Users\{username}\AppData\Local\Temp %USERDOMAIN% {userdomain} %USERNAME% {username} %USERPROFILE% C:\Users\{username} %WINDIR% C:\Windows %PUBLIC% C:\Users\Public %PROGRAMDATA% C:\ProgramData %PSModulePath% %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\
http://www.binbert.com/blog/2010/09/default-environment-variable-values-of-windows-7-xp/
但願這能夠幫助。
編輯:僅當您正在執行的環境更改是因爲運行批處理文件而致使的時纔有效。
若是批處理文件以SETLOCAL
開頭,那麼即便退出該批處理以前您忘記調用ENDLOCAL
或意外停止,它也會始終在退出時解散回到原始環境。
我寫的幾乎每一個批處理文件都以SETLOCAL
開始,由於在大多數狀況下,我不但願保留環境更改的反作用。 若是我確實但願某些環境變量更改傳播到批處理文件以外,則個人最後一個ENDLOCAL
以下所示:
ENDLOCAL & ( SET RESULT1=%RESULT1% SET RESULT2=%RESULT2% )
經過設計,Windows沒有內置的機制能夠將環境變量添加/更改/刪除傳播到已經運行的cmd.exe,能夠從另外一個cmd.exe或從「個人電腦->屬性->高級設置->環境變量」。
若是在現有打開的命令提示符範圍以外修改或添加新的環境變量,則須要從新啓動命令提示符,或者在現有命令提示符下使用SET手動添加。
最新接受的答案顯示了部分解決方法,方法是手動刷新腳本中的全部環境變量。 該腳本處理在「個人電腦...環境變量」中全局更改環境變量的用例,可是若是在一個cmd.exe中更改了環境變量,該腳本將不會將其傳播到另外一個正在運行的cmd.exe。