我试图将一个批处理文件分解出来,将一个环境变量设置为另一个批处理文件。这篇文章有点涉及,我宁愿不在多个批处理文件中重复它。我不会使用我试图在嵌套批处理文件中运行的实际代码使这篇文章过于复杂,但是会提供一个简单的例子来说明我正在尝试做什么并重现问题。
Batch1.cmd
cmd.exe /c setvar.cmd abc def
set abc
setvar.cmd
set var=%1
set val=%2
set %var%=%val%
Batch1.cmd中为“set abc”返回的错误是:
未定义环境变量abc
我想cmd.exe启动一个新环境,因为在返回Batch1.cmd时,该变量不存在。
有没有办法可以嵌套批处理文件并保留它创建的环境?
答案 0 :(得分:3)
进程之间不共享环境块。当您启动一个新的cmd
实例时,会在将控件返回到当前批处理文件之前创建,更改和销毁单独的环境块,这将不会看到任何更改,因为它是在不同的进程中完成的。
使用call setvar.cmd abc def
在当前进程中启动嵌套批处理文件。
答案 1 :(得分:1)
使用setx <var> <val>
命令更持久地设置环境变量。例如:
setx WEBCAM_ADDR 192.168.0.101
(注意:与常规set命令一样,没有等号(=))
我只是遇到了这个问题,试图从Windows运行批处理文件。这比必须在某个位置编写配置文件要好。