【问题标题】: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 FORFOR /? 以获取有关 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 2020-12-07
        • 2014-08-16
        • 2011-11-25
        相关资源
        最近更新 更多