如何制作一个能够改变环境变量的Windows批处理文件?

3

有没有可能制作一个批处理文件,使其可以对环境变量进行持久性更改?

例如,我的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个回答

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

好的,你可以这样做:

设置 EnvVariableName="Some Value"

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

rem install_and_run.bat
call install.bat
myapplication.exe


1

据我所知,你无法在批处理脚本中创建或修改环境变量,并使其在控制台会话之间保持持久。

我有一个使用批处理脚本包装的VBScript脚本,用于此目的,但我认为Jay给出了正确的解决方案。不过,如果你愿意,我可以发布我的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接