若是修改或添加环境变量,则必须从新启动命令提示符。 我是否能够执行一个无需重启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。