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
  )