我怎样才能让一个Windowsbatch file改变一个环境variables?

是否有可能做一个batch file,可以使一个环境variables的持久性改变?

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

仅供参考 – 我正在安装的内容非常频繁:我每次运行程序时都要重新安装一次。 此外,我不想重写其他以前安装的程序副本,以防万一其他(较旧的)实例仍在执行。

我想能够做到这样的事情:

rem install_and_run.bat install.bat myapplication.exe 

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

 cmd /C install.bat myapplication.exe 

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

必须有一种方法来创build一个改变环境variables的batch file

有什么build议么?

Solutions Collecting From Web of "我怎样才能让一个Windowsbatch file改变一个环境variables?"

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

 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的新实例的环境进行“持续”更改。

好吧,你可以这样做:

设置EnvVariableName =“某个值”

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

rem install_and_run.bat
call install.bat
myapplication.exe

您不能创建或修改环境变量,并使其在批处理脚本AFAIK的控制台会话之间保持不变。

我有一个VBScript脚本和一个批处理脚本包装器,但我认为Jay有正确的解决方案。 如果你喜欢,但我可以发布我的代码。