代码之家  ›  专栏  ›  技术社区  ›  John Smith

在javascript中设置环境变量

  •  5
  • John Smith  · 技术社区  · 17 年前

    如何在调用另一个程序的WSH jscript文件中设置环境变量?以下是简化的测试用例:

    envtest.js
    ----------
    var oShell = WScript.CreateObject("WScript.Shell");
    var oSysEnv = oShell.Environment("SYSTEM");
    oSysEnv("TEST_ENV_VAR") = "TEST_VALUE";
    oExec = oShell.Run("envtest.bat", 1, true);    
    
    envtest.bat
    -----------
    set
    pause
    

    我希望在变量列表中看到TEST_ENV_VAR,但它不在那里。发生了什么?

    编辑:

    如果有人能提供一个工作代码示例,我会将其标记为正确答案。:)

    3 回复  |  直到 17 年前
        1
  •  7
  •   Student    15 年前

    问题不在代码中,而是在流程的执行中。将完整的系统变量分配给执行的流程。因此,您的子进程也有相同的变量集。

    因此,您不仅需要为系统设置变量,还需要为流程设置变量。

    这是密码。

    var oShell = WScript.CreateObject("WScript.Shell");
    var oSysEnv = oShell.Environment("SYSTEM");
    oSysEnv("TEST1") = "TEST_VALUE";
    var oSysEnv = oShell.Environment("PROCESS");
    oSysEnv("TEST1") = "TEST_VALUE";
    oExec = oShell.Run("envtest.bat", 1, true);  
    

    创建系统变量后。

    它将为当前进程分配新创建的变量。因此,您的子进程可以在执行“SET”命令时获取该变量。

    对不起,我的英语不好。

        2
  •  2
  •   Anders    17 年前

    有4个“集合”(系统、用户、Volatile和进程),如果您只需要一个子进程来查看变量,则可能需要Process

        3
  •  0
  •   Joey Gumbo    17 年前

    您将获得系统环境变量。我怀疑你根本没有修改它们的权限;您可以尝试将其更改为用户环境变量。

    我也不知道这个论点是否正确 Environment() 是否区分大小写。MS的文档使用 "System" 而不是 "SYSTEM"