簡體   English   中英

在 Powershell 中執行批處理文件

[英]Execute batch file in Powershell

我想從批處理文件中執行以下操作:

"C:\OpenCover\tools\OpenCover.Console.exe" -register:user -target:"%VS110COMNTOOLS%..\IDE\mstest.exe" -targetargs:"/testcontainer:\"C:\Develop\bin\Debug\MyUnitTests.dll\" ... "
PAUSE

現在我想將進程的輸出記錄到一個文件中,我遇到了非常方便的 powershell 用法

powershell "dir | tee output.log"

但這不會將我的批處理文件作為第一個參數( powershell "my.bat | tee output.log" ),因為它不是 cmdlet 或函數或腳本文件的名稱。

我可以更改我的批處理文件,以便顯示powershell "OpenCover.Console.exe..."但我必須調整所有引號並更改轉義字符等。

有沒有辦法在powershell中執行批處理文件? 或者有沒有辦法在一些powershell命令之后從批處理中刪除我的行並且它全部執行“像它應該的那樣”?

除非您的批處理文件位於%PATH%中的文件夾中,否則 PowerShell 不會找到它[1] ,因此您必須提供顯式文件路徑(無論是相對路徑還是絕對路徑)。

例如,如果批處理文件在當前文件夾中,請運行:

powershell -c ".\my.bat | tee output.log"

考慮添加-noprofile以禁止加載配置文件,這通常只在交互式會話中需要。

如果您的批處理文件路徑包含嵌入的空格,請將其括在單引號中並添加&

powershell -c "& '.\my script.bat' | tee output.log"

注意:我特意在上面添加了-c (縮寫: -Command )參數名稱; powershell.exe - Windows PowerShell中-默認為這個參數,即不再是真正的在PowerShell[核心] V6 +(其可執行文件的名稱是pwsh ),其中-File現在是默認的-見about_PowerShell.exeabout_pwsh


[1] 更准確地說,PowerShell - 與cmd.exe不同 -在設計上不會僅通過文件名執行當前文件夾中的腳本(在交互式 PowerShell 會話中,您將獲得該效果的提示)。 這是一項安全功能,旨在防止意外調用與預期不同的可執行文件。

除非您在 OP 中沒有說明這樣做的目的,否則沒有理由同時使用 Powershell 和批處理腳本。 如果您只想從 PS 執行此操作,您可以創建一個 PS 腳本來完成批處理文件所做的一切。

為了避免轉義問題(或者利用 CMD.EXE 有點奇怪的轉義行為 :-),您可以使用 PS 3.0 中引入的--% 它記錄在 about_escape_characters 下。

暫無
暫無

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

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