我想使用命令提示符比较两个文本文件,我使用两个名为abc和xyz的文本文件。我需要在其他文本文件中使用唯一记录。但是我得到的一些字符串的输出会转到第二行,这会将我的网址分成两行,有没有办法比较它们,并以现有文本文件中的相同格式输出。
fc abc.txt xyz.txt > unique.txt
abc文件包含以下数据
newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-branch-5e1.aspx
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=75
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=76
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=202
newsroom.associatedbank.com/News-Releases/Associated-Bank-finances-12M-for-retail-and-residential-projects-5dc.aspx
newsroom.associatedbank.com/News-Releases/Associated-Banc-Corp-completes-purchase-of-risk-and-benefits-consulting-firm-Ahmann-Martin-Co-5db.aspx
newsroom.associatedbank.com/News-Releases/Associated-opens-new-Rochester-branch-5da.aspx
xyz文件包含以下数据
newsroom.associatedbank.com/News-Releases/Associated-Bank-opens-new-Minocqua-branch-5e1.aspx
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=75
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=76
newsroom.associatedbank.com/content/default.aspx?NewsAreaId=2&SubjectId=202
newsroom.associatedbank.com/News-Releases/Associated-opens-new-Rochester-branch-5da.aspx
答案 0 :(得分:2)
如果您已Windows PowerShell 2.0
已安装,则无需下载Windows 7
。
从cmd.exe
命令行:
powershell Compare-Object -ReferenceObject (Get-Content abc.txt) -DifferenceObject (Get-Content xyz.txt) –IncludeEqual ^| Out-File -FilePath unique.txt -Width 4096
注意:
–IncludeEqual
(仅为piquancy添加); |
管道已^|
转义以将其传递给PowerShell,而不是在cmd
中对其进行处理; -Width 4096
更改为所需的输出行长度(整数范围)。任何其他字符都会被截断,而不会被包装。如果省略此参数,则宽度由主机的特征决定。 Windows PowerShell控制台的默认值为80(字符); 要查看SideIndicator
输出格式,请忽略^| Out-File ...
,如下所示。您应该在屏幕上截断输出。
powershell Compare-Object -ReferenceObject (Get-Content abc.txt) -DifferenceObject (Get-Content xyz.txt) –IncludeEqual
使用alias names for Cmdlets并省略 PowerShell 语句的可选部分,下一个命令应该给出相同的结果:
powershell diff (type abc.txt) (gc xyz.txt) -includeequal
答案 1 :(得分:0)
“但我获得的某些字符串的输出会转到第二行,这会将我的网址划分为两条不同的行”
当一行包含超过127个字符时, fc
有一个错误。
它已针对Windows XP和Windows Vista进行了修复,但不适用于Windows 7。
它在Windows 7中无法正常工作(使用32位或64位fc.exe
)
当命令比较包含记录中包含超过127个字符的任何ASCII或UNICODE记录的文件时。
来源where are known errors in fc.exe for windows 7 published
我创建了两个测试文件xxx.txt和yyy.txt,它们在行nnn上有所不同,但是fc / n报告它们在行nnn + 1处不同。似乎fc已将前一行的一行拆分为两行。使用十六进制编辑器检查文件时,在fc拆分线的位置处没有显示行尾字符0D或0A的痕迹。对于较大的文件,报告的来自fc的不匹配位置和发生不匹配的实际行非常不同步。 这是fc中已知的错误,该程序中已发布此类已知问题的列表在哪里?
...
Windows XP和Windows Vista都有热修复程序。我没有看到一个Windows 7
文章ID:953930 - 当您比较的两个文件在字符串中的第128个字节周围有TAB或SPACE字符时,Fc.exe命令在基于Windows XP的计算机上无法正常工作 http://support.microsoft.com/kb/953930
文章ID:953932 - 当您比较的两个文件在字符串中的第128个字节周围有TAB或SPACE字符时,Fc.exe命令在Windows Vista或Windows Server 2008中无法正常工作 http://support.microsoft.com/kb/953932
答案 2 :(得分:0)
我建议你试试
findstr /i /L /x /v /g:xyz.txt abc.txt > unique.txt
应报告abc.txt
中xyz.txt
中不存在的任何行/i
/L
忽略大小写,/x
字面意思,无正则表达式,/v
- 完全匹配,而不是在不匹配的部分行abc.txt
行上
因此,xyz.txt
中{strong} <{1}}中{@ 1}}中显示的任何行都将定向到unique.txt
(tks JosefZ)