如何在批处理脚本中刷新 PATH 环境变量

Posted

技术标签:

【中文标题】如何在批处理脚本中刷新 PATH 环境变量【英文标题】:How can I refresh the PATH environment variable in a Batch script 【发布时间】:2017-02-12 20:26:41 【问题描述】:

我有一个批处理文件“file.bat”,它将使用以下命令调用安装程序:

msiexec.exe /i "%~dp0\installer.msi"

安装程序将安装程序并更新 Path 变量。 虽然这很好用,但问题是当我尝试启动程序时找不到它,因为显然 PATH 变量没有更新。 我尝试从自身内部重新启动批处理文件:

start cmd /c file.bat 

但它没有用。 有没有办法刷新 PATH 变量,或者在新进程中重新启动批处理文件,以便它检测到新环境?

PS:手动重启批处理文件当然可以,但这不是我想要的。

谢谢。

【问题讨论】:

set path=%path%;C:\Some other folder 我认为如果您发布整个 file.bat 可能会有用。 您必须使用命令 reg 或命令 直接从注册表中读取安装程序刚刚修改的 system PATH 值setx 并用新的 system PATH 更新/替换 local PATH。请参阅Why are other folder paths also added to system PATH with SetX and not only the specified folder path? 上的示例答案,如何直接从注册表中获取 system PATH 感谢您的建议。我最终使用了这里的解决方案:***.com/questions/171588/… 它需要一个额外的文件才能工作。奇怪的是,这不能更容易解决! 【参考方案1】:

刷新 %path% 环境变量的简单批处理文件:

@echo off
echo.
echo Refreshing PATH from registry

:: Get System PATH
for /f "tokens=3*" %%A in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') do set syspath=%%A%%B

:: Get User Path
for /f "tokens=3*" %%A in ('reg query "HKCU\Environment" /v Path') do set userpath=%%A%%B

:: Set Refreshed Path
set PATH=%userpath%;%syspath%

echo Refreshed PATH
echo %PATH%

【讨论】:

这是一个很好的答案J03L,但问题是当我这样设置路径时:JAVA_7 = C:\Program Files\Java\jdk1.7xxxx JAVA_8 = C:\Program Files\Java\jdk1 .8xxxx JAVA_HOME = %JAVA_8% Path = %JAVA_HOME%\bin;%MAVEN_HOME%\bin 因为这会生成一个带有 %JAVA_8%\bin;C:\windows\System32\WindowsPowerShell\v1.0\;C:\ 的 PATH windows\idmu\common 等。您是否认为可以更改批处理文件以在用户变量上生成二级变量替换?只是好奇,仍然是一个不错的答案! 由于某种原因,并非路径中的所有空格都被保留(即原始路径显示“Program Files (x86)”,但设置变量显示“ProgramFiles (x86)”)。【参考方案2】:

IN Windows PowerShell 退出并再次运行

【讨论】:

【参考方案3】:

最简单的方法是使用 Chocolatey (freeare)。然后你就可以用一个简单的命令重新加载 PATH(带变量扩展):

refreshenv

从 cmd 安装(需要管理员权限):

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

示例用法:

> SET JAVA_HOME=c:/java/jdk6
> SET PATH=%JAVA_HOME%/bin
> ECHO %PATH%
c:/java/jdk6/bin

> SET JAVA_HOME=c:/java/jdk8
> refreshenv
Refreshing environment variables from registry for cmd.exe. Please wait...Finished..
> echo %PATH%
c:/java/jdk8/bin

【讨论】:

以上是关于如何在批处理脚本中刷新 PATH 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

批处理脚本机器环境变量

dos命令临时和永久设置环境变量方法

bat批处理文件怎么将路径添加到path环境变量中

如何在vbs中设置可以在调用批处理脚本中读取的环境变量

如何在环境变量PATH中搜索和替换字符串?

关于“环境变量未定义”的问题