有什么方法可以比较压缩文件夹和解压文件目录吗?

有什么方法可以比较压缩文件夹和解压文件目录吗?

我知道 Windows Explorer、7-Zip、Beyond Compare 和其他程序可以查看压缩目录以查看文件结构和文件名。

有没有办法将这些文件名与解压后的目录进行比较?理想情况下,将多个 Zip 文件中的文件名与一个大的解压后的目录进行比较?

本质上,我想在继续删除所有文件夹之前检查它们是否已正确解压。

答案1

Beyond Compare 可以做到这一点,只要 zip 文件中的文件名是唯一的。

  1. 打开 Beyond Compare文件夹比较
  2. 在左侧加载一个包含所有 zip 文件的文件夹。
  3. 在右侧加载包含解压文件夹的文件夹。
  4. 点击规则工具栏按钮(裁判图标)。
  5. 前往处理标签。
  6. 存档处理(例如 zip 文件)和文件夹一样
  7. 点击好的
  8. 选择视图 > 忽略文件夹结构从菜单中。

这将展开所有 zip 文件,然后根据文件名对齐内容,同时忽略子文件夹或 zip 文件名。它不处理重复的文件名。

答案2

解决此问题的另一个方法是使用 7-zip 的 CLI。

  1. 首先,关注确保 CLI 正常工作
  2. 然后导航到包含所有 zip 文件的目录并使用以下命令:7z l *.zip | Out-File -FilePath ./zipped_files.txt此命令的第一部分让 7-zip 对目录中的每个 zip 存档执行列表操作。竖线后的部分让 PowerShell/cmd 将响应输出到文件。
  3. 此文件将列出 zip 目录中的所有文件。该文件的最后几行还包含所有包含的存档的总大小和文件数量。我在这里停止了,因为文件数量与我解压目录中的数量相匹配。

如果要继续:

  1. 使用正则表达式解析所有文件路径。
  2. 使用另一个工具获取解压目录中所有文件路径的列表。(树?)
  3. 运行文件差异检查来查找孤立文件。

答案3

这可以在电源外壳使用shell.应用程序com 对象。

假设:

C:\Test
│   Zipped1.zip (conains new1.txt, new2.txt, new3.txt)
│   Zipped2.zip (conains new4.txt, new5.txt, new6.txt)
└───UnZipped
        New1.txt
        New2.txt
        New3.txt
        New4.txt
        new5.txt
        new6.txt
$UnzippedFilePath   = 'C:\tEST\UnZipped'
$ZippedFilePaths    = @'
C:\tEST\Zipped1.zip
C:\tEST\Zipped2.zip
'@ -split "`n"

###    Note: If Explorer optioins are set to hide known extensions,
###   "$_.Name" will have no extension.
###   Splitting "$_.Path" ensures the extension is inclueded

$ZippedFileNames   = $ZippedFilePaths.ForEach{@($shell.NameSpace($_).Items()).ForEach{$_.Path.Split('\')[-1]}}
$UnzippedFileNames = (Get-ChildItem $UnzippedFilePath).Name

###   This returns names that don't match
Compare-Object $ZippedFileNames $UnzippedFileNames

### This returens names that are matched
Compare-Object $ZippedFileNames $UnzippedFileNames -IncludeEqual

输出(来自 -IncludeEqual)


InputObject SideIndicator
----------- -------------
New1.txt    ==
New2.txt    ==
New3.txt    ==
New4.txt    ==
new5.txt    ==
new6.txt    ==

相关内容