【问题标题】:parent child environment variables父子环境变量
【发布时间】:2013-10-16 18:04:25
【问题描述】:
子进程是否可以更改或传回环境变量给父进程?
例如:
我有一个运行一系列访问数据库的批处理文件。一旦数据库完成了它的查询,我想使用 VBA 将一个值传回批处理文件 - 但我似乎无法让它工作。
我可以使用getEnvironmentVariable 函数读取父变量,但setEnvironmentVariable 似乎不起作用。
【问题讨论】:
标签:
vba
batch-file
environment-variables
【解决方案1】:
您的 vba 将拥有自己的调用它的批处理环境副本。您可以在本地副本中设置一个值,但是一旦 vba 将控制权返回给您的批处理脚本,它就会消失。所以答案是否定的,你不能直接做你想做的事。
你想做的是一个共同的需求。一种解决方案是将值写入临时文件,然后让父批处理脚本读取值并删除临时文件。
如果您的 vba 可以写入标准输出,则可以避免使用临时文件 - 我假设您可以,但我不确定。您的批处理脚本可以通过 FOR /F 调用您的数据库并处理标准输出输出。 FOR /F 解析输出的方式有很多选择。
一般语法是:
for /f "options" %%A in ('yourCommand') do (REM process values using %%A)
在命令提示符下键入 HELP FOR 或 FOR /? 以获取有关 FOR 命令的完整帮助。
【解决方案2】:
你可以从 vba 执行一个 cmd 命令,所以设置一个你可以使用的环境变量:
Dim cmd_str
cmd_str = "setx env_var_name env_var_value"
Call Shell(cmd_str, vbNormalFocus)
请注意,这将为当前用户创建/设置环境变量,可以添加 /M 参数以使该系统范围广,但 cmd 必须以管理员身份运行才能工作。
vbNormalFocus 选项将允许命令提示出现,然后在片刻后消失,如果您不想看到它,请改用 vbHide。