2016-08-02 28 views
1

的環境,在這裏Is it possible to set an environment variable to the output of a command in cmd.exe說我一直使用的窗口oneliner設置命令輸出變量

mycommand.exe>%TEMP%\out.txt 
set /P FOO=<%TEMP%\out.txt 

但是,這是醜陋的,因爲它創建了一個文件。

for方法是更好,但複雜

我想要的東西簡單一拉UNIX,如:

mycommand.exe|set /P FOO= 

沒有錯誤,但我FOO運行後未設置。

爲什麼這不起作用?

+0

請參閱[本文]中的說明(http://stackoverflow.com/questions/8192318/why-does-delayed-expansion-fail-when-inside-a-piped-block-of-code/) – Aacini

回答

2

我能想到的最好的方法是創建自己的小批處理文件,它默默地使用FOR構造。例如,您可以創建一個名爲BatchSet.bat的批處理文件,存儲在您的路徑中的某個位置。該批次將包含以下代碼:

@Echo off 
for /f "delims=" %%i in ('%2') do set %1=%%i 
Set %1 

如果你運行這個用下面的命令:

BatchSet MyVar whoami 

你會得到這樣的:

MyVar=servername\John 

顯然,命令你運行應該限制其輸出到一行,以便正確存儲在環境變量中。 舉例來說,如果你運行它是這樣的:

BatchSet MyVar Vol 

然後你就只能得到命令的輸出

MyVar= Volume on drive C is labeled MyDisk 

的第一線,但所有的一切,這是一個相當優雅做你正在尋找的方式。

請注意批次中的最後一行僅僅是提供視覺輸出。它可以完全刪除。

+1

您可以在批處理文件的參數中使用等號作爲分隔符。另外,當這個批處理文件在另一個文件中被使用時,不要忘記包含'call'命令:'call BatchSet MyVar = whoami' – Aacini