如何提取包含多个具有相同名称/路径的文件的 zip 档案中的每个文件?

如何提取包含多个具有相同名称/路径的文件的 zip 档案中的每个文件?

我有一个 zip 文件,其中包含多个具有相同文件名的文件(并且没有子文件夹)。这些文件实际上是不同的文件:它们具有独特的大小和内容,并且只是名称“重复”。我的问题是,如何提取它们而不让一个文件覆盖另一个文件?WinRAR 和 PowerArchiver 似乎都无法自动执行此操作(除非我说可以覆盖,否则两者都会在仅提取三个文件后停止)。如果我手动一次提取一个文件,它只会提取具有给定名称的最近添加的文件;但是,根据存档的整体大小,我知道其他文件的数据在其中。因此,我尝试在仍在 zip 中时重命名文件(我先复制了 zip);重命名一个文件花了 10 分钟,最终重命名了两个文件(尽管保留了独特的大小)!我不知道该怎么做,请帮忙。

编辑:问题解决了!尽管 WinRAR 和 PowerArchiver 都失败了,但一款名为 7-Zip 的免费小型开源程序却能够顺利完成提取。

答案1

您可以尝试使用 infozip 的 unzip 命令行实用程序。它有一个选项 -B,用于创建提取过程中覆盖的任何文件的备份,这可能会让您得到两个同名的文件。您可以从以下位置下载http://www.info-zip.org/

如果这不起作用,应该可以相当轻松地编写一个程序,例如使用 Javajava.util.zip.ZipInputStream类遍历文件并提取具有新名称的重复条目。如果您自己没有能力做到这一点,可以访问各种自由职业者招聘网站,那里有许多程序员,他们可以以不多的钱完成这项工作。

答案2

您可以尝试逐个提取文件,然后在每次提取后重命名。为此,请准备好 DOS/CMD 命令(用于重命名新创建的文件)并打开 DOS/CMD 窗口以重命名每个新文件(可能通过在末尾附加一个字符)。

答案3

我仍然不确定这种情况是如何发生的(档案中可以有多个具有相同完整路径和名称的文件)——这没有意义,因为现有的文件应该进行更新/替换,而不是添加新的。

无论如何,每当我遇到这种情况时,我都会使用某些存档程序的自动重命名功能来解决这个问题。当您提取此类存档时,程序将提取具有该名称的第一个文件,然后当它检测到后续文件发生冲突时,它会提示您要做什么。大多数程序都会提供忽略并继续或覆盖的选择,但有些程序,例如7-Zip压缩包将允许您重命名文件和/或自动重命名所有名称冲突的文件。

7-Zip(图 1)将在文件名后附加一个下划线和一个递增数字(例如,foobar_1.txtfoobar_2.txt等),而 WinRAR(图 2)将在文件名后附加一个带括号的递增数字(例如,foobar(1).txtfoobar(2).txt等)。


图17-Zip 的文件名冲突提示

7-Zip 的文件名冲突提示,其中自动重命名选项突出显示

图 2WinRAR 的文件名冲突提示

WinRAR 的文件名冲突提示,突出显示重命名选项

图 3生成的文件名

重命名文件的资源管理器屏幕截图

相关内容