2009-04-20 230 views
5

如何在WSH jscript文件中设置调用其他程序的环境变量?下面是简化的测试案例:在javascript中设置环境变量

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在变量列表,但它不存在。怎么了?

编辑:

如果有人能生成一个工作的代码示例中,我将标志着作为正确答案。 :)

+0

我不知道你是否在尝试做一些恶意的事情。 – 2009-05-27 19:42:00

回答

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”命令时获得这个变量。

对不起,我的坏英语。

+0

谢谢! – 2009-06-08 14:31:47

0

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

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

2

有4个“集合”(系统,用户,挥发性和流程),你可能想的过程,如果你只需要一个子进程来查看变量