父子环境变量

时间:2013-10-16 18:04:26

标签: vba batch-file environment-variables

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

例如:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

一般语法是:

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

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

答案 1 :(得分:0)

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

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

请注意,这将为当前用户创建/设置环境变量,可以添加/ M参数以使此系统变宽,但必须以管理员身份运行cmd才能使其生效。

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