如何制作更改环境变量的Windows批处理文件?

时间:2009-01-28 16:25:27

标签: windows scripting batch-file

是否可以制作一个可以对环境变量进行持续更改的批处理文件?

例如,我的installer.bat脚本将一些文件复制到计算机文件系统中的随机位置。我想将该位置添加到PATH环境变量中,以便程序可以在当前会话中运行。

仅供参考 - 我正在安装的内容经常更改:我希望每次运行程序时都要进行全新安装。此外,我不想覆盖其他以前安装的程序副本,以防万一其他(较旧的)实例仍在执行。

我希望能够做到这样的事情:

rem install_and_run.bat
install.bat 
myapplication.exe 

不幸的是,这不起作用,因为install.bat永远不会“返回”主脚本。永远不会调用myapplication.exe。接下来我尝试了:

cmd /C install.bat
myapplication.exe 

不幸的是,这不起作用,因为这意味着install.bat在完全独立的cmd.exe shell中运行。这意味着一旦脚本终止,环境变量更改就不会持续,因为cmd.exe也会终止。

必须有办法制作一个更改环境变量的批处理文件

有什么建议吗?

3 个答案:

答案 0 :(得分:6)

在你的情况下,你想要的是

rem install_and_run.bat
call install.bat 
myapplication.exe

也就是说,使用call来调用install.bat,以便控件返回install_and_run.bat

我认为你不明白环境变量每个进程。您的批处理文件正在cmd.exe的实例中运行,并且该实例具有环境。当您编写cmd /C时,您正在创建一个cmd.exe的新实例,该实例具有自己的环境。然后install.bat正在对cmd.exe的新实例的环境进行“持久”更改。

答案 1 :(得分:1)

嗯,你可以这样做:

设置EnvVariableName =“Some Value”

关于从另一个批处理文件中调用单独的批处理文件,我相信call命令将返回

rem install_and_run.bat
call install.bat
myapplication.exe

答案 2 :(得分:1)

您无法创建或修改环境变量,并且它可以在批处理脚本AFAIK的控制台会话之间保持不变。

我有一个VBScript脚本,我使用了批处理脚本包装器,但我认为Jay有适合您的解决方案。如果您愿意,我可以发布我的代码。