powershell - PowerShell Compare-Object 可以进行二进制比较吗?
问题描述
这两个文件明显不同。但是Compare-Object
发现没什么区别。第一个文件有一个 Unicode BOM。有什么方法Compare-Object
可以确定它们不同吗?
PS C:\Temp> dir file*
Directory: C:\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2021-06-01 14:38 163673 file1.txt
-a--- 2021-03-18 17:08 163670 file2.txt
PS C:\Temp> Compare-Object -ReferenceObject (Get-Content -Path .\file2.txt) -DifferenceObject (Get-Content -Path .\file2.txt)
PS C:\Temp> Format-Hex -Path .\file1.txt | Select-Object -First 1
Label: C:\Temp\file1.txt
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 ***EF BB BF*** 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E <?xml version
PS C:\Temp> Format-Hex -Path .\file2.txt | Select-Object -First 1
Label: C:\Temp\file2.txt
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 3D 22 31 <?xml version="1
PS C:\Temp> $PSVersionTable.PSVersion.ToString()
7.1.3
解决方案
这两个文件不同,但产生的字符串Get-Content
是相同的。
使用-Encoding
参数Get-Content
读取原始字节值:
Compare-Object (Get-Content .\file2.txt -Encoding Byte) (Get-Content .\file1.txt -Encoding Byte)
您可能会发现Get-FileHash
检测两个(或更多)文件的字节级相等性更有效:
PS ~> Get-FileHash *.txt
Algorithm Hash Path
--------- ---- ----
SHA256 F1945CD6C19E56B3C1C78943EF5EC18116907A4CA1EFC40A57D48AB1DB7ADFC5 C:\path\to\file1.txt
SHA256 E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 C:\path\to\file2.txt
推荐阅读
- sql-server - 特殊情况的非聚集索引
- linux - 列出特定用户拥有的 UNIX 中的文件
- ionic-framework - 如何在 Ionic 中将翻译文件(下载后)保存在本地?
- azure-devops - 如何为 Azure Pipelines 中的每个阶段使用不同的服务连接?
- excel - excel 文件是否在内部存储为 XML 文件?
- python - 正则表达式从日志文件中提取不需要的 IP 地址
- node.js - 在 nodeJs 中设置环境变量
- kubernetes - kubernetes 仪表板错误:“度量客户端健康检查失败:服务器找不到请求的资源(获取服务堆)。”
- angular - 循环显示未定义的数据集
- python - 在 Keras 中对 4D 数据执行 2D 卷积