【问题标题】:How can I make a Windows batch-file which changes an environment variable?如何制作更改环境变量的 Windows 批处理文件?
【发布时间】:2009-01-28 16:25:26
【问题描述】:

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

例如,我的 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 也会终止。

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

有什么建议吗?

【问题讨论】:

    标签: windows scripting batch-file


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      好吧,你可以这样做:

      设置 EnvVariableName="某个值"

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

      rem install_and_run.bat
      call install.bat
      myapplication.exe

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2014-09-14
          • 1970-01-01
          • 2014-03-03
          • 1970-01-01
          • 2021-07-03
          • 2011-04-17
          • 1970-01-01
          • 2014-08-10
          • 2014-01-08
          相关资源
          最近更新 更多