![](/img/trans.png)
[英]Redirecting output to a command-line argument of another command in Windows
[英]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 off
了echo 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.