7zip 递归归档文件夹中的文件
7zip recursively archive files in folders
我需要以特殊方式归档所有文件,但不归档复杂目录结构中的文件夹。每个子文件夹(无论结构有多深)都将包含一个 zip 文件,其中包含曾经存在的所有文件。
如果我使用 7zip a -r -tzip files.zip \*.\*
这会将所有结构放在一个根文件(文件和文件夹)中。不好。
解决方案是使用批处理脚本来递归此结构,并为找到的每个文件夹创建一个 zip 文件并删除原始文件。但是我只知道简单的循环,不是无限制的,也不是在未知的目录结构中。
例如:
for /F "tokens=1" %%u in ('dir /b /ad parentfolder') do (
只列出一级子目录。
使用(1)FOR
命令迭代(2) 所有 IN (*)
(3) 目录 /D
, (4)递归/R
和 (5) 找到的每个目录 %%a
,
(6)应用DO
(7) 7z
命令创建一个 zip (8) 命名为目录 %%~na.zip
(9)包括目录%%a\*
的所有内容
for /r /d %%a in (*) do (
7z a %%a\%%~na.zip %%a\*
)
(可选),您可能想删除除最近创建的 zip 文件之外的目录内容,将另一个 FOR
放入其中前一个FOR
,后7z
for %%b in (*) do (
if not %%b==%%~na.zip erase %%a\%%b
)
我需要以特殊方式归档所有文件,但不归档复杂目录结构中的文件夹。每个子文件夹(无论结构有多深)都将包含一个 zip 文件,其中包含曾经存在的所有文件。
如果我使用 7zip a -r -tzip files.zip \*.\*
这会将所有结构放在一个根文件(文件和文件夹)中。不好。
解决方案是使用批处理脚本来递归此结构,并为找到的每个文件夹创建一个 zip 文件并删除原始文件。但是我只知道简单的循环,不是无限制的,也不是在未知的目录结构中。
例如:
for /F "tokens=1" %%u in ('dir /b /ad parentfolder') do (
只列出一级子目录。
使用(1)FOR
命令迭代(2) 所有 IN (*)
(3) 目录 /D
, (4)递归/R
和 (5) 找到的每个目录 %%a
,
(6)应用DO
(7) 7z
命令创建一个 zip (8) 命名为目录 %%~na.zip
(9)包括目录%%a\*
for /r /d %%a in (*) do (
7z a %%a\%%~na.zip %%a\*
)
(可选),您可能想删除除最近创建的 zip 文件之外的目录内容,将另一个 FOR
放入其中前一个FOR
,后7z
for %%b in (*) do (
if not %%b==%%~na.zip erase %%a\%%b
)