2009-04-20 164 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個「集合」(系統,用戶,揮發性和流程),你可能想的過程,如果你只需要一個子進程來查看變量