2013-10-16 166 views
0

子進程是否可以更改或傳回環境變量到父進程?父級子環境變量

例如:

我有一個運行一系列訪問數據庫的批處理文件。一旦數據庫已經通過查詢運行,我想通過VBA將值傳遞迴批處理文件 - 但我似乎無法得到這個工作。

我可以通過使用​​功能讀取父變量,但setEnvironmentVariable似乎並不工作。

回答

0

您可以執行從VBA一個cmd命令,所以要設置一個環境變量,你可以使用:

Dim cmd_str 
cmd_str = "setx env_var_name env_var_value" 
Call Shell(cmd_str, vbNormalFocus) 

注意,這將創建/設置環境變量爲當前用戶,A/M參數被添加到使這個系統廣泛,但cmd必須作爲管理員運行這個工作。

如果您不想看到它使用vbHide,vbNormalFocus選項將允許命令提示符出現,然後消失一段時間。

2

您的vba將擁有自己的稱爲它的批處理環境副本。您可以在本地副本中設置一個值,但一旦vba將控制權返回給您的批處理腳本,它就會消失。所以答案是否定的,你不能直接做你想做的事。

你想做什麼是一個共同的需求。一種解決方案是將值寫入臨時文件,然後讓父批處理腳本讀取值並刪除臨時文件。

如果您的vba可以寫入stdout,您可以避免臨時文件 - 我假設您可以,但我不確定。您的批處理腳本可以通過FOR/F調用您的數據庫並處理stdout輸出。 FOR/F如何分析輸出有很多選項。

一般語法是:

for /f "options" %%A in ('yourCommand') do (REM process values using %%A) 

類型HELP FORFOR /?從命令提示符得到充分的幫助,在FOR命令。