Windows - 使cmd看到PATH更改

时间:2013-08-13 16:29:49

标签: batch-file path cmd

我有一堆批处理文件,我想按顺序运行。其中一个运行MSI,为PATH添加一个文件夹。如何在不重新启动CMD的情况下确保后续批处理文件会注意到此更改?我正在使用Windows Server 2008 R2 x64。

我已尝试callcmd /cstart "",希望启动新流程能够正常运作,但事实并非如此。

in run-both-scripts.bat
call script1.bat  <-- This runs an MSI which modifies the PATH
call script2.bat  <-- This relies on the PATH changes which were made by the MSI in script1.bat

澄清一下:重现这一点非常简单。

  1. 启动CMD
  2. 手动创建环境变量 ,而不是setx,以模仿MSI的功能。
    1. 右键点击计算机 - &gt;属性 - &gt;高级系统设置 - &gt;环境变量 - &gt;新
    2. 创建一个名为hello的环境变量,其值为hi there
  3. 在您的CMD窗口中,输入echo %hello%。你会得到%hello%
  4. 试试cmd /c "echo %hello%。你会得到%hello%
  5. 尝试start ""打开新的CMD流程;输入echo %hello%。你会得到%hello%
  6. 尝试start "" echo %hello%在新的CMD流程中运行该命令。你会得到%hello%
  7. 最后,尝试手动从“开始”菜单打开一个新的CMD窗口,然后从那里键入echo %hello%。您会看到hi there
  8. 所以你可以看到我能够让CMD看到环境变量变化的唯一方法是重启CMD。

1 个答案:

答案 0 :(得分:0)

好的,做了一些研究,并找出了为什么我们向你投掷的解决方案不起作用。当您将cmd.exe作为应用程序启动时,它会查看当前环境变量并将其复制到内存中。在批处理文件中启动cmd时,它不会查看环境变量,而是查看当前批处理文件中设置的变量,并使用它们。这是在内存中存储数据时的问题。唯一可行的方法是将当前环境变量复制到文本文件中作为硬盘上的内存。现在,问题是如何去做。

经过大量研究,我唯一能找到与该主题相关的东西就是start /i的使用,然而,当我测试它时它没有用。 (start /?了解更多信息)。

换句话说,其他setx,我不认为批量可行。

莫纳