當我pwsh -c echo hello在 cmd 中使用此命令時,我得到以下輸出:
C:\>pwsh -c echo hello
hello
C:\>
當我在 powershell 上運行它時,最后沒有換行:
PS C:\> pwsh -c echo hello
hello
PS C:\>
所以我認為問題出在cmd。我知道這不是一個問題,并且有一個簡單的解決方法,但是我有一些程式使用 cmd 來訪問 powershell 并且洗掉該換行符并不是那么有趣。那么是否有任何解決方法可以防止 cmd 添加該行?
uj5u.com熱心網友回復:
Mofi在評論中提供了關鍵指標:
當以互動方式執行命令時,
cmd.exe無條件地在命令的輸出中附加一個換行符(換行符),大概是為了可讀性,也可能是為了確保下一個提示總是從新行開始。- 無論該命令是什么,這都適用。換句話說:您的命令恰好是PowerShell命令并不重要。
但是,該尾隨換行符不會成為命令輸出的一部分,因此命令輸出的編程處理不受影響,例如當您重定向
>到檔案或使用for /f.換句話說:對于編程處理,您不需要洗掉尾隨換行符,因為它不是實際命令輸出的一部分。
相反,如果您確實需要抑制顯示的尾隨換行符,則必須修改命令的輸出- 如果這甚至是一個選項 - 以便輸出本身不會以換行符結尾,如下所示超級用戶回答
cmd.exe自己的命令echo;對于 PowerShell,您可以執行pwsh -c Write-Host -NoNewLine hello.
邊緣案例:
從沒有(或使用)運行的批處理檔案中捕獲輸出時- 在這種情況下,尾隨換行符 確實成為輸出的一部分 - 您可以通過管道過濾掉空行(如鏈接答案中所示);例如@echo offecho onfindstr /r /v /c:"^$"
foo.cmd | findstr /r /v /c:"^$"
但是,請注意,所有空行都以這種方式被過濾掉 - 可能包括批處理檔案執行的命令的輸出中的實際空行。
如果需要防止這種情況發生,則需要更復雜的方法,但是(a)依賴于C:\>正在使用的標準提示字串(例如,),并且(b)仍然會產生誤報:
foo.cmd | powershell -nop -c "@($Input) -join \"`n\" -replace '\n(?=[a-z]:\\.*?>)'"
最后請注意,如果您在不捕獲或重定向其輸出的情況下執行上述命令,則它們在cmd.exe控制臺中的整體輸出將再次具有尾隨換行符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/439102.html
下一篇:了解編碼語法
