0

子进程是否可以更改或将环境变量传递回父进程?

例如:

我有一个运行一系列访问数据库的批处理文件。一旦数据库完成了它的查询,我想使用 VBA 将一个值传递回批处理文件 - 但我似乎无法让它工作。

我可以使用getEnvironmentVariable函数读取父变量,但setEnvironmentVariable似乎不起作用。

4

2 回答 2

2

您的 vba 将拥有自己的调用它的批处理环境的副本。您可以在本地副本中设置一个值,但是一旦 vba 将控制权返回给您的批处理脚本,它就会消失。所以答案是否定的,你不能直接做你想做的事。

你想做的是一个共同的需求。一种解决方案是将值写入临时文件,然后让父批处理脚本读取值并删除临时文件。

如果您的 vba 可以写入标准输出,您可以避免使用临时文件 - 我假设您可以,但我不确定。您的批处理脚本可以通过 FOR /F 调用您的数据库并处理标准输出输出。FOR /F 如何解析输出有很多选择。

一般语法是:

for /f "options" %%A in ('yourCommand') do (REM process values using %%A)

在命令提示符下键入HELP FORFOR /?以获取有关 FOR 命令的完整帮助。

于 2013-10-16T19:09:50.447 回答
0

您可以从 vba 执行 cmd 命令,因此要设置可以使用的环境变量:

Dim cmd_str
cmd_str = "setx env_var_name env_var_value"
Call Shell(cmd_str, vbNormalFocus)

请注意,这将为当前用户创建/设置环境变量,可以添加 /M 参数以使该系统范围广,但 cmd 必须以管理员身份运行才能正常工作。

vbNormalFocus 选项将允许命令提示出现,然后在片刻后消失,如果您不想看到它,请改用 vbHide。

于 2013-10-16T18:48:44.097 回答