如何使用 7-Zip 命令行存档子目录?或者,如何在存档时保留文件夹结构?

如何使用 7-Zip 命令行存档子目录?或者,如何在存档时保留文件夹结构?

我有一堆这样的文件:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

我只是想知道如何保持归档时的文件夹结构。这比重复更重要,知道如何解决这个问题会是加分项。

@Lamb “您是否只想存档 G1 和 G2 文件夹中的选择性文件(而不是整个文件夹内容)?”

这几乎说明了一切,但我会努力改进:我不仅想移动仅将部分选定文件添加到存档。我还有一个列表这些文件,包括每个文件的路径名。

因此,SubDir1 中可能有 10 个文件,我想压缩其中三个,而 SubDir1\sub2 中可能有 5 个文件,我想压缩所有 5 个。我需要存档的文件位于列表文件中。

可能会有重复的文件,所以我希望添加子目录后,7-Zip 不会将它们视为重复文件。

我喜欢在命令行上执行此操作。

我尝试过这样的批处理文件:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

这也意味着文件 01antique-shop.mp3、02antique-shop.mp3、....、直到 33antique-shop.mp3 和 34antique-shop.mp3 不应被存档。

文件夹名称(=子目录)未添加到 MyArchive.7z,这就是问题所在。

显然,我只想使用一个带有列表文件的突击队员,但这也不起作用。

我试过了:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt

就选择而言,它实际上工作得很好,但它没有保留目录结构。遗憾的是。

我该怎么做呢?

答案1

7-Zip 的最新稳定版本 (15.14) 具有启用绝对路径存储的开关 -spf。

例如,如果文件列表.txt

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

该命令7z a p.7z -spf @list.txt将生成一个存档,其中存储了列表中的绝对路径。或者,该命令7z a p.7z -spf2 @list.txt将删除驱动器号:

tmp\dir1\file.txt
tmp\dir2\file.txt

如果文件列表.txt

dir1\file.txt
dir2\file.txt

在 9.20 和 15.14 版本中,该命令7z a p.7z @list.txt都将相对路径按原样存储在列表中。

我使用 -spf 开关进行了更多测试。结果如下这里

答案2

我将其存档为带有子目录的目录使用以下

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

答案3

尝试一下这个:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

问题似乎是人们一直在要求获得正确的路径存储选项(就像它们对于修改多卷档案的能力),但作者似乎不感兴趣。这也是我开始大量使用 WinRAR 的原因之一。


如果你有列表文件,7-Zip 将不是如果要归档的文件不共享单个顶级目录,则存储路径。例如,如果您有输入.txt包含以下内容:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

如果您运行7z a MyArchive.7z @Input.txt,您会看到路径已被完全剥离,这对我来说似乎完全是倒退的(OTOHrar a MyArchive.rar @Input.txt可以很好地完成工作)。

因此,为了克服 7-Zip 的缺陷,您可以使用如下批处理文件:

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

笔记:用目标存档的正确路径替换D:\MyArchive.7z。此外,无论您是否在列表文件中引用了路径,批处理文件都应该可以工作。


编辑:如果你的列表文件如下所示:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

或者

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

然后将其编辑成如下所示:

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

现在假设全部要存档的文件位于 下C:\$$-edrive,导航到 C:\ 并运行7z a C:\MyArchive.7z @C:\Input.txt。使用列表文件将保存路径仅有的如果没有驱动器号,则没有初始反斜杠,并且所有文件的顶级(根)目录相同。此外,为了获得最佳效果,我建议您不要在 C:\$$-edrive 中创建 MyArchive.7z。

答案4

7-Zip 无论如何都会将它们视为重复项,并跳过它们。如果有任何方法可以解决这个问题,我从未找到过 - 我总是将工作分成几个档案。

相关内容