我正在尝试提取一个批处理文件的一部分,该文件将环境变量设置为另一个批处理文件。这部分内容有点复杂,我不想在多个批处理文件中重复它。我不会用我试图在嵌套批处理文件中运行的实际代码使这篇文章过于复杂,但会提供一个简单的示例来说明我正在尝试做什么并重现问题。
批处理1.cmd
cmd.exe /c setvar.cmd abc def
set abc
设置变量命令
set var=%1
set val=%2
set %var%=%val%
Batch1.cmd 中“set abc”返回的错误是这样的:
Environment variable abc not defined
我想 cmd.exe 会启动一个新环境,因为在返回 Batch1.cmd 时,变量不存在。
有没有一种方法可以嵌套批处理文件并保留它创建的环境?
最佳答案
环境 block 不在进程之间共享。当您启动一个新的 cmd
实例时,会在将控件返回到当前批处理文件之前创建、更改和销毁一个单独的环境 block ,因为它是在不同的进程中完成的,所以不会看到任何更改。
使用call setvar.cmd abc def
启动当前进程中的嵌套批处理文件。
关于windows - 在嵌套批处理文件中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892911/