是否可以制作一个可以对环境变量进行持续更改的批处理文件?
例如,我的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也会终止。
必须有办法制作一个更改环境变量的批处理文件
有什么建议吗?
答案 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有适合您的解决方案。如果您愿意,我可以发布我的代码。