使用批处理文件,我可以重命名 ZIP 文件中的文件吗?

使用批处理文件,我可以重命名 ZIP 文件中的文件吗?

我有一个重命名文件的批处理文件。

是否可以重命名 ZIP 文件中的文件?如果不可以,是否可以在后台“提取”它们,重命名它们并将它们“添加”回同一个 ZIP 存档中?

答案1

您可以使用命令行版本7-zip

例如:

7z e archive.zip -o C:\Temporary\Dir
ren C:\Temporary\Dir\*.* *.renamed
7z a archive.zip C:\Temporary\Dir\* -aoa -y -sdel

e代表 Extract,-o是输出目录。
然后,您ren将文件放入其中(使用批处理脚本中现有的任何文件)。
最后,我们a将所有 ( *) 文件从C:\Temporary\Dirdd 到相同的archive.zip,但由于它们存在,我们希望覆盖所有 ( -aoa) 并确保我们同意 ( -y) 任何提示(如果出现)。
哦,因为我们想让它干净,-sdel所以确保已添加到存档的所有文件都被删除。

答案2

Zip 格式为每个条目单独存储元数据和数据。因此,它允许您迭代条目并动态更改条目名称,而无需解压缩/压缩数据,这是一种高效流式传输、内存和磁盘的方式。

我不知道有什么工具可以开箱即用,所以你必须使用如下库库压缩并将其与您最喜欢的语言绑定。

因此,如果您的 zip 档案很小,并且您不会一遍又一遍地执行此任务,那么您应该坚持提取/重命名/存档过程。

答案3

虽然有点晚了,但是由于它对我有用,所以我将分享我的发现:

http://www.info-zip.org/FAQ.html#rename

基本上,您必须使用 zipnote 实用程序。

Example:
     zipnote foo.zip > foo.tmp
     ed foo.tmp
     ... then you edit the comments, save, and exit ...
     zipnote -w foo.zip < foo.tmp

"@ name" can be followed by an "@=newname" line to change the name

它仍将重写整个文件,但比提取文件、重命名、从 zip 中删除文件、添加重命名的文件要少一步。

答案4

您可以按照上面的建议提取 -> 重命名 -> 压缩,或者您可以编辑 zip 的十六进制数据以更改文件内的名称

一个例子: 例如1

显然,用批处理来做这件事比提取、重命名和压缩要困难得多,但如果您必须在它仍在 zip 中时重命名它,这是可能的,因为文件的实际名称存在于 .zip 中,您还可以将原始名称转换为十六进制,在文件中搜索该十六进制数组并将其替换为新的。

相关内容