gpt4 book ai didi

windows - 可执行文件如何在父 CMD 或批处理上下文中设置环境变量?

转载 作者:可可西里 更新时间:2023-11-01 14:48:02 26 4
gpt4 key购买 nike

我有一个设置环境变量的 Windows 控制台可执行文件(称为 SetEnvX.exe)。在内部它调用 SetEnvironmentVariable在 Windows API 中。该调用成功。

在执行 SetEnvX.exe 的父 CMD 实例中,如果 SET 在 SetEnvX.exe 之后立即运行,则它创建的环境变量不存在。

如果我用这些行创建一个 TEST.CMD

SetEnvX.exe
set

TEST.CMD 中 SET 命令的输出也不显示由 SetEnvX.exe 创建的环境变量。

诸如 SetEnvX.exe 之类的程序如何创建一个环境变量,该变量存在于交互式 CMD shell 或执行它的批处理文件的范围内?换句话说,我不想将环境变量放入全局持久环境中。

最佳答案

这是不可能的。每当您调用 SetEnvX.exe 时,cmd.exe 都会生成一个从 cmd.exe 继承环境变量的子进程。

SetEnvX.exe 在其环境中设置环境变量,但当它完成时,它的环境 block 就会消失。所以父 cmd.exe 不会从子 SetEnvX.exe 获取任何变量。

长话短说:

子进程可以继承父进程的环境变量,但父进程退出时不能继承子进程的环境变量。

解决方法:

如果您自己编译了SetEnvX.exe,您可以打印该值,然后在cmd.exe 中捕获它,而不是设置环境变量。例如:

for /f "delims=" %%k in ('SetEnvX.exe') do set VARIABLE=%%k

关于windows - 可执行文件如何在父 CMD 或批处理上下文中设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com