在javascript中设置环境变量

时间:2009-04-20 14:21:04

标签: javascript environment batch-file wsh

如何在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 个答案:

答案 0 :(得分:6)

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

您的代码示例效果很好。它将变量添加到SYSTEM环境中。

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

这是代码。

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”命令时获取该变量。

抱歉我的英语不好。

答案 1 :(得分:2)

如果您只需要子进程来查看变量,那么您可能需要4个“集合”(系统,用户,易失性和进程)

答案 2 :(得分:0)

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

此外,我不知道Environment()的参数是否区分大小写。 MS的文档使用"System"代替"SYSTEM"。可能会有所作为,但我不确定。