tim*_*11g 2 windows cmd batch-file
我有一个设置环境变量的 Windows 控制台可执行文件(称为 SetEnvX.exe)。它SetEnvironmentVariable在内部调用Windows API。那个调用成功了。
在执行 SetEnvX.exe 的父 CMD 实例中,如果SET在 SetEnvX.exe 之后运行,它创建的环境变量不存在。
如果我用这些行创建一个 TEST.CMD
SetEnvX.exe
set
Run Code Online (Sandbox Code Playgroud)
SETTEST.CMD 中命令的输出也没有显示由 SetEnvX.exe 创建的环境变量。
SetEnvX.exe 等程序如何创建存在于交互式 CMD shell 或批处理文件范围内的环境变量?换句话说,我不想把环境变量放到全局的、持久化的环境中。
小智 5
这不可能。每当您调用SetEnvX.execmd.exe 时,都会生成一个从 cmd.exe 继承环境变量的子进程。
SetEnvX.exe在它的环境中设置环境变量,但是当它完成时,它的环境块消失。所以 parent cmd.exe 不会从 child 获取任何变量SetEnvX.exe。
特尔;博士:
子进程可以继承父进程的环境变量,但父进程退出时不能继承子进程的环境变量。
解决方法:
如果SetEnvX.exe是自己编译的,不用设置环境变量,直接打印值然后在cmd.exe中捕获即可。例如:
for /f "delims=" %%k in ('SetEnvX.exe') do set VARIABLE=%%k
Run Code Online (Sandbox Code Playgroud)