子进程是否可以将环境变量更改或传回父进程?
例如:
我有一个运行一系列访问数据库的批处理文件。一旦数据库运行了它的查询,我想使用VBA将值传递回批处理文件 - 但我似乎无法使其工作。
我可以使用getEnvironmentVariable
函数读取父变量,但setEnvironmentVariable
似乎不起作用。
答案 0 :(得分:2)
您的vba将拥有自己的批处理环境副本。您可以在本地副本中设置一个值,但是一旦vba将控制权返回到批处理脚本,它就会消失。所以答案是否定的,你不能直接做你想做的事。
您想要做的是一个共同的需求。一种解决方案是将值写入临时文件,然后让父批处理脚本读取值并删除临时文件。
如果您的vba可以写入stdout,您可以避免使用临时文件 - 我认为您可以,但我不确定。您的批处理脚本可以通过FOR / F调用您的数据库并处理stdout输出。 FOR / F如何解析输出有很多选项。
一般语法是:
for /f "options" %%A in ('yourCommand') do (REM process values using %%A)
从命令提示符处键入HELP FOR
或FOR /?
以获取有关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。