我有一堆批处理文件,我想按顺序运行。其中一个运行MSI,为PATH
添加一个文件夹。如何在不重新启动CMD的情况下确保后续批处理文件会注意到此更改?我正在使用Windows Server 2008 R2 x64。
我已尝试call
,cmd /c
和start ""
,希望启动新流程能够正常运作,但事实并非如此。
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
澄清一下:重现这一点非常简单。
setx
,以模仿MSI的功能。
hello
的环境变量,其值为hi there
。echo %hello%
。你会得到%hello%
。cmd /c "echo %hello%
。你会得到%hello%
。start ""
打开新的CMD流程;输入echo %hello%
。你会得到%hello%
。start "" echo %hello%
在新的CMD流程中运行该命令。你会得到%hello%
。echo %hello%
。您会看到hi there
。所以你可以看到我能够让CMD看到环境变量变化的唯一方法是重启CMD。
答案 0 :(得分:0)
好的,做了一些研究,并找出了为什么我们向你投掷的解决方案不起作用。当您将cmd.exe作为应用程序启动时,它会查看当前环境变量并将其复制到内存中。在批处理文件中启动cmd时,它不会查看环境变量,而是查看当前批处理文件中设置的变量,并使用它们。这是在内存中存储数据时的问题。唯一可行的方法是将当前环境变量复制到文本文件中作为硬盘上的内存。现在,问题是如何去做。
经过大量研究,我唯一能找到与该主题相关的东西就是start /i
的使用,然而,当我测试它时它没有用。 (start /?
了解更多信息)。
换句话说,其他setx
,我不认为批量可行。
莫纳