type "a" | findstr /bevlig:"b.txt">不同内容.txt 这一句是错误的。
看了下附件,两个文本大小都不超过3MB,13W多行,谈不上"超大"。
用 PowerShell 就可以搞定,脚本长一点而已。
保存为 Test.ps1,单击右键,选择"使用 PowerShell 运行"。- $myPath = $MyInvocation.MyCommand.Path -replace '\\[^\\]*$', '\';
- $fileA = $myPath + 'a.txt'; #源文本A
- $fileB = $myPath + 'b.txt'; #源文本B
- $fSame = $myPath + '相同.txt'; #相同文本
- $fDiff = $myPath + '不同.txt'; #不同文本
-
- If (![IO.File]::Exists($fileA) -or ![IO.File]::Exists($fileB)){
- echo '源文件不存在';
- [Console]::ReadLine();
- exit;
- }
-
- $htA = New-Object System.Collections.HashTable; #HashTable,存放文本A数据
- $htB = New-Object System.Collections.HashTable; #HashTable,存放文本B数据
- $srA = New-Object System.IO.StreamReader($fileA, [Text.Encoding]::Default); #读文本A
- $srB = New-Object System.IO.StreamReader($fileB, [Text.Encoding]::Default); #读文本B
- $swSame = New-Object System.IO.StreamWriter($fSame, $false, [Text.Encoding]::Default); #写文件->相同
- $swDiff = New-Object System.IO.StreamWriter($fDiff, $false, [Text.Encoding]::Default); #写文件->不同
-
- while($srB.Peek() -ge 0){
- $strLine = $srB.ReadLine(); #逐行读文本B
- If (!$htB.ContainsKey($strLine)){
- $htB.Add($strLine, $true); #存入HashTable
- }
- }
- $srB.Dispose();
- $srB.Close();
-
- while($srA.Peek() -ge 0){
- $strLine = $srA.ReadLine(); #逐行读文本A
- If (!$htA.ContainsKey($strLine)){
- $htA.Add($strLine, $true); #存入HashTable
- }
- If (!$htB.ContainsKey($strLine)){
- $swDiff.WriteLine($strLine); #写文件->不同
- $swDiff.Flush();
- } Else {
- $swSame.WriteLine($strLine); #写文件->相同
- $swSame.Flush();
- }
- }
- $srA.Dispose();
- $srA.Close();
- $swSame.Dispose();
-
- $srB = New-Object System.IO.StreamReader($fileB, [Text.Encoding]::Default); #读文本B
- while($srB.Peek() -ge 0){
- $strLine = $srB.ReadLine();
- If (!$htA.ContainsKey($strLine)){
- $swDiff.WriteLine($strLine); #写文件->不同
- $swDiff.Flush();
- }
- }
- $srB.Dispose();
- $srB.Close();
- $swDiff.Dispose();
-
- echo 'Done';
- [Console]::ReadLine();
复制代码
|