我想从批处理文件执行以下操作:
"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.exe
和about_pwsh
[1]更准确地说,PowerShell-与设计不同cmd.exe
-将不会仅通过文件名执行当前文件夹中的脚本(在交互式PowerShell会话中,您会获得提示)。这是一项安全功能,旨在防止意外调用与预期不同的可执行文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句