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

问题描述 投票:0回答:4

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

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

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

start cmd /c file.bat 

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

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

谢谢。

windows batch-file path environment-variables windows-server-2012
4个回答
11
投票

最简单的方法,使用 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

3
投票

在 Windows PowerShell 中退出并再次运行


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%

0
投票

要重置 Windows 批处理脚本中的路径,您可以从 powershell 输出系统环境变量并将输出分配给路径,如下所示:

for /f "tokens=* usebackq" %%p in (

powershell -Command "& {[System.Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [System.Environment]::GetEnvironmentVariable('Path','User')}"
) do (set path=%%p)

© www.soinside.com 2019 - 2024. All rights reserved.