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


16

我有一堆这样的文件:

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中可能有五个文件,我想压缩所有五个文件。我需要存档的文件在列表文件中。

可能存在重复的文件,所以我希望添加子目录后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

就选择而言,它实际上工作得很好,但它不会保留目录结构。可悲的是。

我该怎么做呢?


您是否要仅存档G1和G2文件夹中的选择性文件(而不是整个文件夹内容)?
Ankit

Answers:


12

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

例如,如果文件list.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

如果文件list.txt

dir1\file.txt
dir2\file.txt

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

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


我一天都在搜索这个想法。谢谢 !
Moshe L

9

使用以下命令将其包含具有子目录的目录:

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

我在任何地方都找不到直接链接到7zA.exe的链接(按照您的链接),它已过时并被7z.exe取代了吗?
PrincessPooleRulz

@ user194767:7za.exe是命令行版本
卡兰2013年

并且,我想使用它,但在该页面7-zip.org/download.html上找不到它。因此,请明确地说:“在任何地方都找不到到7zA.exe的直接链接”,我真正的意思是:“请给我直接链接到这个免费软件!” 谢谢!
PrincessPooleRulz

1
@ user194767:好的,这是当前版本,但是您是在告诉我在该页面上的任何地方都找不到7-Zip命令行版本吗?
卡兰

我无法使用7z.exe尝试使用7zA.exe,因此它可以正常工作。我不确定-r标志用于什么,但是不需要归档子目录。
Eric Roper

7

尝试以下方法:

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将不会存储路径。例如,如果您的Input.txt包含以下内容:

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

如果运行7z a MyArchive.7z @Input.txt,您将看到路径已被完全剥离,这对我来说似乎是完全倒退的(OTOH rar 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。


好吧,答案是3/4 OK。RAR超级好,但批处理文件正常工作。这是输出,它只向我的档案中添加了一个文件,文件名中没有空格的文件___ C:\ Programs \ zippers \ 7-Zip>(已推送“ C:\ c:\ Programs \ zippers \ 7-Zip \ 7z .exe ac:\ $$-edrive \ FGH.7z“ $$-edrive \ G \ gattaca_7mp 3_zefen \ gattaca-03 the one moment.mp3”“ popd)7-Zip 4.65版权所有(c)1999-2009 Igor Pavlov 2009扫描正在更新存档c:\ $$-edrive \ FGH.7z错误:无法打开文件FGH.7z.tmp访问被拒绝。系统错误:未定义的错误=====最重要的也许是访问被拒绝的错误?
PrincessPooleRulz

您可以从实际列表文件中添加一些示例行(带空格和不带空格)到上述问题吗?
卡兰

好的,所以我在文件名中用点代替了所有空格,但在路径名中没有用点代替,我现在将尝试使用。输出仍然是:C:\ Programs \ zippers \ 7-Zip>((______推入c:_______ c:\ Programs \ zippers \ 7-Zip \ 7z.exe ac:\ $$-edrive \ FGH.7z“ $$- edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-。starcraft.vs.south.park.mp3“ _______ popd________)________扫描中正在更新档案c:\ $$-edrive \ FGH.7z错误:无法打开文件FGH.7z.tmp访问否认。系统错误:未定义的错误
PrincessPooleRulz

“我用文件名中的点替换了所有空格”-意味着您重命名了实际文件,还是刚刚编辑了列表文件?文件名和路径中的空格都应该很好,请参见上面的编辑(即从列表文件中删除C:\,并在所有路径周围加上引号)。现在您应该可以直接使用7z,而不是我的批处理文件。
卡兰2013年

1.我将两个都重命名为= = = = = =2。我已经进行了更改,但在7z = = = = = = 3上仍然无效。$$-edrive \确实是唯一的顶级目录。= = = = =4。错误消息= = = = =针对文件的警告:= = = = = $$-edrive:系统找不到该文件。= = = = = = = = = =“ $$-edrive:系统找不到该文件。= = = = = = = = = = =警告:找不到2个文件= = = = = C:\ Programs \ zippers \ 7-Zip> = = = = =请注意,有两个警告,第二个警告以一个双引号开头...奇怪吗?
PrincessPooleRulz

0

7-Zip会视其为重复项,并跳过它们。如果有任何解决方法,我从未发现过-我总是将工作分解成几个档案。


您知道在将文件压缩到存档中时如何保持文件夹结构吗?他们说这是默认设置,但不是。
PrincessPooleRulz

@ user194767-我使用如下命令行:%ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempwhere ZDIR是7-Zip的路径,ZIP是目标驱动器。
MT_Head

0

不确定如何帮助重复。但是,我认为比创建一个具有完整命令的批处理更方便的系统是创建listfile.txt:

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

然后用压缩它们 7z a -r -tzip archive.zip @listfile.txt


0

我创建了一个bat脚本,用于totalcmd“ tot-zip.bat”:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

然后在totalcmd中为其创建一个快捷方式: 在此处输入图片说明

然后,当您要压缩某些文件/文件夹并保留相对于%TOP_DIR%您的文件夹结构时,只需选择所需的文件(在某处%TOP_DIR%)并按按钮。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.