> cat .\foo.txt
abc
> cat .\foo.txt | md5sum
c13b6afecf97ea6b38d21a8f5167fa1e *-
> md5sum foo.txt
b79545611b3be30f90a0d21ef69bca82 *foo.txt
cat
和md5sum
是unix端口(来自Windows Git发行版)。
这是我真实用例的玩具示例,它是二进制数据与传统python脚本的管道,我无法改变。由于管道正在进行编码,因此二进制文件已损坏。
我尝试更改$OutputEncoding
,[Console]::OutputEncoding
并使用chcp
,所有人都没有帮助(但也许我做得不对,这一切都非常复杂...... )。
PowerShell's pipe adds linefeed中的实用程序对我来说不起作用,因为它处理进程参数(我需要将一些参数传递给遗留脚本,有些需要引用,但实用程序接受所有参数为一个字符串)
最佳解决方案让我以某种方式告诉powershell完全关闭编码,只是表现为unix / cmd。
答案 0 :(得分:0)
如果您使用的是Get-Content
cmdlet,请按照https://technet.microsoft.com/en-us/library/hh847788.aspx中给出的建议处理二进制数据:
读取和写入二进制文件时,使用Byte值作为Encoding动态参数,使用值0作为ReadCount参数。
无论您是否使用Get-Content
,您可能都希望避免将数据表示为String
。 String
类型是为字符数据设计的,并不适合处理二进制数据。
答案 1 :(得分:0)
除了使用cmd
来运行包括管道在内的命令外,没有办法解决它:
cmd /c cat.exe .\foo.txt "|" md5sum
请注意管道字符是引用的,因此它由cmd而不是powershell解释。