我知道 Windows Explorer、7-Zip、Beyond Compare 和其他程序可以查看压缩目录以查看文件结构和文件名。
有没有办法将这些文件名与解压后的目录进行比较?理想情况下,将多个 Zip 文件中的文件名与一个大的解压后的目录进行比较?
本质上,我想在继续删除所有文件夹之前检查它们是否已正确解压。
答案1
Beyond Compare 可以做到这一点,只要 zip 文件中的文件名是唯一的。
- 打开 Beyond Compare文件夹比较。
- 在左侧加载一个包含所有 zip 文件的文件夹。
- 在右侧加载包含解压文件夹的文件夹。
- 点击规则工具栏按钮(裁判图标)。
- 前往处理标签。
- 放存档处理(例如 zip 文件)到和文件夹一样。
- 点击好的。
- 选择视图 > 忽略文件夹结构从菜单中。
这将展开所有 zip 文件,然后根据文件名对齐内容,同时忽略子文件夹或 zip 文件名。它不处理重复的文件名。
答案2
解决此问题的另一个方法是使用 7-zip 的 CLI。
- 首先,关注这确保 CLI 正常工作
- 然后导航到包含所有 zip 文件的目录并使用以下命令:
7z l *.zip | Out-File -FilePath ./zipped_files.txt
此命令的第一部分让 7-zip 对目录中的每个 zip 存档执行列表操作。竖线后的部分让 PowerShell/cmd 将响应输出到文件。 - 此文件将列出 zip 目录中的所有文件。该文件的最后几行还包含所有包含的存档的总大小和文件数量。我在这里停止了,因为文件数量与我解压目录中的数量相匹配。
如果要继续:
- 使用正则表达式解析所有文件路径。
- 使用另一个工具获取解压目录中所有文件路径的列表。(树?)
- 运行文件差异检查来查找孤立文件。
答案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 ==