Windows批处理文件,在批处理文件中调用的EXE的路由输出

时间:2019-04-08 23:11:40

标签: windows powershell batch-file

在我的批处理文件中,我调用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"

运行批处理文件时,将创建结果文件,但其中包含零内容。怎么写得像我一样需要它?

2 个答案:

答案 0 :(得分:1)

以下应在批处理文件中工作:

prog.exe file.txt > results\results.txt

如果您想同时重定向stdoutstderr,请使用:

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范围以外的字符音译为文字 ?字符,这将导致信息丢失