簡體   English   中英

如何使用命令輸出作為另一個命令的參數?

[英]How To Use A Command Output As An Argument of Another Command?

這是我的一個老問題的更新,因為我不太清楚。
老實說,我什至沒有Win_CLI經驗來提出正確的問題。 所以,對不起,我希望這次更好。

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

例如:-

CLITool -Switch (Value_OF_a_Command_OutPut)

我想我需要的是Set命令:

Set Value=
         Command

CLITool -Switch %Value%

但是,問題在於輸出值將使用Line_Break打印!

OutPut_Value
CLITool -Switch (Nothing!)

因此,該命令將無法正確執行。

所以..我現在的問題是如何解決“ Set命令”問題,
如果可能的話,如何用另一種技術做同樣的事情?

順便說一句,正如大多數Linux用戶所知,可以在另一個命令的同一命令行中使用命令輸出,如下所示:

CLITool -Switch $(Command)

我希望Windows CLI中是否有類似的東西。

請告訴我發布實際命令是否更好。


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

您可以將for /f命令使用。 對於執行的命令輸出中的每一行,將執行do子句中的代碼,並將do的內容存儲在for replaceable參數中

 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實例中執行的,而cmd實例是在沒有延遲擴展的情況下啟動的(默認行為),因此,訣竅是轉義對變量的引用(百分號加倍的原因),並強制在行中進行雙解析階段( call的原因)

另一種可能是

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

這樣,我們在pipt的右側運行一個cmd實例,該實例啟用了延遲擴展( /v ),啟用了擴展( /e ),並且echo offecho off/q ),這將執行所需的命令。

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

如果您從可執行文件返回兩行,並希望將每一行分配給一個變量,則

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

應該保存並顯示結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM