如何在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,但它并不存在。怎么了?
编辑:
如果有人可以生成有效的代码示例,我会将其标记为正确的答案。 :)
答案 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"
。可能会有所作为,但我不确定。