6

如何在调用另一个程序的 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,但它不存在。怎么了?

编辑:

如果有人可以生成一个工作代码示例,我会将其标记为正确答案。:)

4

3 回答 3

7

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

您的代码示例效果很好。它将变量添加到 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”命令时获取该变量。

对不起,我的英语不好。

于 2009-06-02T05:59:36.743 回答
2

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

于 2009-05-12T15:59:25.220 回答
0

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

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

于 2009-04-21T06:34:31.010 回答