如何在批处理脚本中刷新 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 环境变量的主要内容,如果未能解决你的问题,请参考以下文章