在我的批处理文件中,我调用EXE,并希望将输出重定向到文件。在PowerShell命令行中,它看起来像这样:
prog.exe file.txt | Out-File results\results.txt -Encoding ascii
以上内容在命令行中有效。在我的批处理文件中,我将其编写为:
prog.exe file.txt | powershell -Command "Out-File results\file.txt -Encoding ascii"
运行批处理文件时,将创建结果文件,但其中包含零内容。怎么写得像我一样需要它?
答案 0 :(得分:1)
以下应在批处理文件中工作:
prog.exe file.txt > results\results.txt
如果您想同时重定向stdout
和stderr
,请使用:
prog.exe file.txt > results\results.txt 2>&1
答案 1 :(得分:1)
kichik's helpful answer向您展示了仅使用批处理文件功能的有效解决方案。
除非您需要使用 ASCII或以外的其他编码来创建文件,否则无需参与PowerShell,它只会减慢速度。
也就是说,您可以通过chcp
中的cmd.exe
选择不同的代码页,但是对于UTF-8,仅将65001
输出到文件确实有意义,但是请注意,生成的文件将没有 BOM-与在Windows PowerShell中使用Out-File -Encoding utf8
时不同。
如果您确实需要使用PowerShell,例如,要创建带有BOM的UTF-16LE(“ Unicode”)文件或UTF-8文件 -您必须使用$Input
在PowerShell命令中使用PowerShell内部管道来访问stdin流(即,管道输入的内容):
prog.exe file.txt | powershell -c "$Input | Out-File results\file.txt -Encoding ascii"
请注意,PowerShell只能识别活动代码页中可表示的字符(如chcp
所示),并且可以将其转换为可能不同的编码。
选择-Encoding ascii
实际上会将7位ASCII范围以外的字符音译为文字 ?
字符,这将导致信息丢失。