Pri*_*ulz 17 command-line 7-zip
我有一堆这样的文件:
C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3
Run Code Online (Sandbox Code Playgroud)
我只想知道如何在归档时保持文件夹结构。这比重复的事情更重要,知道如何解决这个问题,将是一个奖励。
@Lamb“您是否只想存档 G1 和 G2 文件夹中的选择性文件(而不是整个文件夹内容)?”
这几乎说明了一切,但我会尝试改进:我不仅只想将某些选定的文件移动到存档中。我还有这些文件的列表,包括每个文件的路径名。
因此,在 SubDir1 中可能有 10 个文件,我想压缩其中的三个,而在 SubDir1\sub2 中可能有五个文件,我想压缩所有五个文件。我需要存档的文件在一个列表文件中。
可能存在重复文件,所以我希望添加子目录后,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
Run Code Online (Sandbox Code Playgroud)
这也意味着文件 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
Run Code Online (Sandbox Code Playgroud)
就选择而言,它实际上工作得很好,但它不保留目录结构。可悲。
我该怎么做呢?
小智 14
7-Zip (15.14) 的最新稳定版本具有启用绝对路径存储的开关 -spf。
例如,如果文件list.txt是
C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt
Run Code Online (Sandbox Code Playgroud)
该命令7z a p.7z -spf @list.txt将生成一个存档,存储列表中的绝对路径。或者,该命令7z a p.7z -spf2 @list.txt将删除驱动器号:
tmp\dir1\file.txt
tmp\dir2\file.txt
Run Code Online (Sandbox Code Playgroud)
如果文件list.txt是
dir1\file.txt
dir2\file.txt
Run Code Online (Sandbox Code Playgroud)
该命令7z a p.7z @list.txt将在 9.20 和 15.14 版本中按原样存储列表中的相对路径。
我用开关 -spf 做了更多的测试。结果在这里。
我得到它使用以下命令归档一个带有子目录的目录:
7z.exe a - t7z NewArchivePath PathOfFolderToArchive
Run Code Online (Sandbox Code Playgroud)
试试这个:
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
Run Code Online (Sandbox Code Playgroud)
这个问题似乎是,人们已经请求多年来为正确的路径存储选项(就像他们对于修改多卷档案的能力),但作者似乎并不感兴趣。这就是我开始大量使用 WinRAR 的部分原因。
如果您有一个列表文件,并且要存档的文件不共享单个顶级目录,则 7-Zip 将不会存储路径。例如,如果您的Input.txt包含以下内容:
C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext
Run Code Online (Sandbox Code Playgroud)
如果您运行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
)
Run Code Online (Sandbox Code Playgroud)
注意:替换D:\MyArchive.7z为目标存档的正确路径。此外,无论您是否在列表文件中引用了路径,批处理文件都应该工作。
编辑:如果您的列表文件如下所示:
"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"
Run Code Online (Sandbox Code Playgroud)
或者
"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"
Run Code Online (Sandbox Code Playgroud)
然后将其编辑为如下所示:
"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"
Run Code Online (Sandbox Code Playgroud)
现在假设所有要归档的文件都在 下C:\$$-edrive,导航到 C:\ 并运行7z a C:\MyArchive.7z @C:\Input.txt。使用列表文件,只有在没有驱动器号、没有初始反斜杠并且所有文件的顶级(根)目录都相同时,才会保存路径。此外,为了获得最佳效果,我建议您不要在 C:\$$-edrive 中创建 MyArchive.7z。
| 归档时间: |
|
| 查看次数: |
70210 次 |
| 最近记录: |