我有一个批处理文件“file.bat”,它将使用以下命令调用安装程序:
msiexec.exe /i "%~dp0\installer.msi"
安装程序将安装程序并更新 Path 变量。 虽然这工作正常,但问题是当我尝试启动程序时找不到它,因为显然 PATH 变量没有更新。 我尝试从内部重新启动批处理文件:
start cmd /c file.bat
但是没有成功。 有没有办法刷新 PATH 变量或者在新进程中重新启动批处理文件以便它检测新环境?
PS:手动重新启动批处理文件当然可以,但这不是我想要的。
谢谢。
最简单的方法,使用 Chocolatey(免费)。然后,您将能够使用简单的命令重新加载 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
在 Windows PowerShell 中退出并再次运行
刷新 %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%
要重置 Windows 批处理脚本中的路径,您可以从 powershell 输出系统环境变量并将输出分配给路径,如下所示:
for /f "tokens=* usebackq" %%p in (
powershell -Command "& {[System.Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [System.Environment]::GetEnvironmentVariable('Path','User')}"
) do (set path=%%p)