我有一个 7zip 存档,其中包含多个文件/文件夹,我想将它们提取到特定位置。我简化了示例,使其最小化、完整且可验证。
-我不想维护目录结构,所以我使用命令e
。我只想让所有文件(在所有目录中)都放到一个地方。
-我有一个特定的输出目录,所以我也使用-o
。
一个限制是我无法更改原始档案(这会涉及另一个团队,我不希望这样做)。我理想情况下不想在提取档案后硬编码要删除的目录。
问题出现在所有内容提取完毕后——我的输出目录中剩下一些空文件夹。7zip 有没有办法删除这些空目录或从一开始就不创建它们?
我的 7zip 命令行如下所示:
D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere
示例 .zip 文件的结构如下:
./A/1.txt
./B/2.txt
./C/3.txt
./D/fileWithNoExt
我的输出目录中想要的是(而不是其他任何东西):
./1.txt
./2.txt
./3.txt
./fileWithNoExt
我的输出目录中有(A
、B
和C
都是空目录):
./1.txt
./2.txt
./3.txt
./fileWithNoExt
./A/
./B/
./C/
./D/
答案1
我能想到的只有一种方法,而且它确实存在缺陷
您当前的命令,但包括:
D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere *.* -r
但问题是
- 没有扩展名的文件不会被提取
- 中间带有 . 的目录仍会被提取
对于上面的示例结构,它应该可以按预期工作,但我不知道您的实际要求。我不相信有专门排除文件夹的方法。
答案2
7zip 解压档案后可以删除空目录吗?
我理想情况下不想在提取档案后对要删除的目录进行硬编码。
我的输出目录中剩下一些空文件夹。7zip 有没有办法删除这些空目录或根本不创建它们?
我测试并确认以下逻辑可以按预期使用您当前正在运行的 7Zip 命令删除提取目录下的空目录。
您只需设置源文件和提取位置,然后将其复制并粘贴到命令提示符中即可执行您所解释的操作。
- 我不确定您对硬编码提取目录和要提取的 zip 文件名有何顾虑,但您的示例表明您正在这样做。因此,下面的方法将不会比您的示例所示花费更多的精力。
此外,使用此方法,您可以保留 7Zip 命令,就像现在使用它们一样。
如果需要,下面这个已确认的工作示例可以进一步扩展为循环遍历特定文件夹中的所有 zip 文件,而不是以某种方式明确地硬编码您的操作方式等。我很乐意添加一个例子,所以请告诉我。
命令提示符逻辑示例
@ECHO ON
SET SourceFile=D:\MyArchive.zip
SET ExtractDir=D:\ExtractToHere
D:\7z.exe e %SourceFile% -o%ExtractDir%
FOR /F "TOKENS=*" %A IN ('"DIR /S /B /AD "%ExtractDir%""') DO RD "%~A"
更多资源和阅读材料
答案3
如果你可以在解压后运行另一个命令,那么你可以使用 robocopy 删除空文件夹
ROBOCOPY folderName folderName /S /MOVE
来源:https://stackoverflow.com/questions/7831286/how-to-delete-empty-folders-using-windows-command-prompt
答案4
如果两遍方法可行,您可以用 列出内容7z l
,然后解析出空目录。然后,您可以用 包含您想要的内容,-i
或用 排除您不需要的内容,-x
具体取决于哪种方法对您来说更有效率。