【发布时间】:2025-12-06 21:40:02
【问题描述】:
我有两个要比较的大文件(超过 10 GB)。以下命令适用于小文件,但似乎占用了我机器上的 RAM 空间。
如何在不消耗大量内存的情况下获得两个文件的差异?
任何想法都将不胜感激。
robocopy.exe C:\Folder\ C:\Folder\ /l /nocopy /is /e /fp /ns /nc /njh /njs /tee /log:c:\temp\FolderList.txt
$path = 'C:\Folder\'
$pattern = [regex]::Escape($path)
$newContent = @()
Get-Content -Path "c:\temp\FolderList.txt" | ForEach-Object {$newContent += $_ -replace $pattern, ''}
Set-Content -Path "c:\temp\FolderList.txt" -Value $newContent
(Get-Content C:\temp\FolderList.txt).Trim() -ne '' | Set-Content C:\temp\FolderList.txt
robocopy.exe C:\Folder2\ C:\Folder2\ /l /nocopy /is /e /fp /ns /nc /njh /njs /tee /log:c:\temp\FolderList2.txt
$path = 'C:\Folder2\'
$pattern = [regex]::Escape($path)
$newContent = @()
Get-Content -Path "c:\temp\FolderList2.txt" | ForEach-Object {$newContent += $_ -replace $pattern, ''}
Set-Content -Path "c:\temp\FolderList2.txt" -Value $newContent
(Get-Content C:\temp\FolderList2.txt).Trim() -ne '' | Set-Content C:\temp\FolderList2.txt
Compare-Object -ReferenceObject (Get-Content c:\temp\FolderList.txt) -DifferenceObject (Get-Content c:\temp\FolderList2.txt)
最后更新
文件夹列表.txt
C:\Folder\Data2\Documents\
C:\Folder\Data2\Documents\1.txt
C:\Folder\Data2\Documents\2.txt
C:\Folder\Data2\Documents\3.txt
C:\Folder\Data2\Documents\4.txt
C:\Folder\Data2\Documents\5.txt
比较Log1.txt
Data2\Documents\
C:\Folder\Data2\Documents\
Data2\Documents\1.txt
C:\Folder\Data2\Documents\1.txt
Data2\Documents\2.txt
C:\Folder\Data2\Documents\2.txt
Data2\Documents\3.txt
C:\Folder\Data2\Documents\3.txt
Data2\Documents\4.txt
C:\Folder\Data2\Documents\4.txt
Data2\Documents\5.txt
C:\Folder\Data2\Documents\5.txt
期望的输出:
Data2\Documents\
Data2\Documents\1.txt
Data2\Documents\2.txt
Data2\Documents\3.txt
Data2\Documents\4.txt
Data2\Documents\5.txt
更新-2:
输出:
Data2\Documents\
C:\Folder\Data2\Documents\
Data2\Documents\1.txt
C:\Folder\Data2\Documents\1.txt
Data2\Documents\2.txt
C:\Folder\Data2\Documents\2.txt
Data2\Documents\3.txt
C:\Folder\Data2\Documents\3.txt
Data2\Documents\4.txt
C:\Folder\Data2\Documents\4.txt
Data2\Documents\5.txt
C:\Folder\Data2\Documents\5.txt
【问题讨论】:
-
为什么不能依赖外部命令行工具,例如默认的 Windows 工具
comp.exe或 Microsoft 实用程序WindDiff或winmerge来获取差异/补丁? -
澄清一下,您是不是特别想区分两个 robocopy 日志文件?或者您是否尝试比较两个文件系统文件夹,而 robocopy 正是您尝试实现该目标的途径?
-
您是否专门尝试区分两个 robocopy 日志文件?是的
-
嗯,我希望有一种方法可以一次从两个文件流式传输一行,例如
get-content file1,file2 | % { compare-object $_[0] $_[1] },但它不起作用。
标签: performance powershell compare