我有一堆这样的文件:
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 无论如何都会将它们视为重复项,并跳过它们。如果有任何方法可以解决这个问题,我从未找到过 - 我总是将工作分成几个档案。