如何在批处理脚本

时间:2016-10-04 15:26:05

标签: windows batch-file path environment-variables windows-server-2012

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

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

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

start cmd /c file.bat 

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

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

感谢。

3 个答案:

答案 0 :(得分:1)

在Windows PowerShell中退出并再次运行

答案 1 :(得分:1)

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

答案 2 :(得分:0)

刷新%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%