我有一个重命名文件的批处理文件。
是否可以重命名 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\Dir
dd 到相同的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 中,您还可以将原始名称转换为十六进制,在文件中搜索该十六进制数组并将其替换为新的。