2015-01-16 147 views
1

這是我的一個老問題的更新,因爲我不太清楚。
老實說,我甚至沒有Win_CLI的經驗來問正確的問題。所以我很抱歉,我希望這個時間更好。如何使用命令輸出作爲另一個命令的參數?

就像我在我的問題中所說的,我需要使用命令輸出作爲另一個命令的參數。

例如: -

CLITool -Switch (Value_OF_a_Command_OutPut) 

我想我在這裏需要的是Set命令: -

Set Value= 
     Command 

CLITool -Switch %Value% 

但是,問題在於,產值將有LINE_BREAK被顯示出來!

OutPut_Value 
CLITool -Switch (Nothing!) 

因此,命令將不會正確執行。

所以..我現在的問題,是如何解決Set指揮問題,
如果可能的話,該怎麼做同樣的事情在另一種技術?

BTW..As大多數Linux用戶都知道,它可以使用命令輸出中的其他命令的命令行相同如下:

CLITool -Switch $(Command) 

我想如果在Windows的命令行類似的東西。

請告訴我是否最好發佈我的實際命令。


謝謝你們,
感謝您的幫助:)

回答

3

您可以使用for /f命令。在執行的命令的輸出的每個線,所述do子句中的代碼將被執行,與存儲在for替換參數

for /f "delims=" %%a in ('command') do CLITool -Switch %%a 

另外,行的內容,就可以執行該命令,發送輸出到一個臨時文件,並用輸入重定向檢索其內容和set /p命令

command > "tempfile" 
<"tempFile" set /p "var=" 
CLITool -Switch %var% 

在兩種情況下,在假設command將回聲只有一行。如果它生成更多行,則for將爲每行執行CLITool,而重定向選項將只從臨時文件中檢索第一行。

解決它的第三種方法是使用管道。管道左側生成內容,右側讀取此內容。

command | (set /p "var=" && @call CLITool -Switch %%var%%) 

爲什麼call%%var%%語法?我們在一行內設置一個變量,並且在同一行中我們需要檢索變量,爲了使其工作,需要延遲擴展。但默認情況下,延遲擴展是被禁用的,並且啓用它並不能解決任何問題,因爲管道的每一邊都在其自身的cmd實例中執行,並且沒有延遲擴展(默認行爲),所以竅門是將引用轉義爲變量在加倍後的百分號的原因),並迫使雙解析相線(用於call的原因)

另一種選擇可能會是爲

command | cmd /e /v /q /c "set /p "var=" && CLITool -Switch !var!" 

這樣,我們在右側運行的啓用了延遲擴展的cmd實例(/v),啓用了擴展(/e),使用echo off/q)將執行所需的命令。

但是管道代碼(在這兩種情況下)都有一個缺點:變量設置在單獨的cmd實例中,因此,您的主批處理文件將無法訪問其值。

+0

感謝兄弟的回覆。你是對的,但只是爲了知識,是否有可能修復我的設置命令示例?另外,還有沒有其他的方式像Linux中使用的那樣:'CLITool -Switch $(Command)'。 如果你想我發佈我的劇本,那麼我會。但我想我會在另一個問題上這樣做... – KorkOoO

+0

@KarimAlHousiny,答案已更新。一般來說,不,在'linux'中的''set = ..''用批處理文件中的'for'命令實現。 –

1

如果您從一個可執行返回兩行,並希望每一個分配給一個變量,然後

set "line1="&set "line2=" 
for /f "delims=" %%a in ('yourcommand') do if defined line1 (set "line2=%%a") else (set "line1=%%a") 
set line 

應保存並顯示結果。

相關問題