所有文件夹中的7zip文件(多个档案)

时间:2015-02-20 09:43:22

标签: file batch-file archive directory 7zip

有没有人知道如何使7zip以递归方式归档所有父文件夹的文件夹中的所有文件。

目前我有这个:

for /d %%X in (C:\Users\mikejoh\Desktop\Modst\Ziptest\*) do "c:\Program Files\7-Zip\7z.exe" a "%%X\*.7z" "%%X\win\*"

但是只接受父文件夹并将它们拉到同一位置...... 我相信我能够在最后添加类似DEL "%%X%的东西来删除文件,但在这种情况下它会删除整个文件夹:(

示例我有以下这些文件夹: enter image description here

这些文件夹包含以下文件夹: enter image description here

我需要压缩WIN文件夹中的所有文件: enter image description here

因此,对于每个文件夹,它都应该在Win文件夹中进行存档,并在win文件夹中包含所有文件。 如果一切顺利,它应该删除已存档的文件。

这样可以在BAT文件中创建吗?

1 个答案:

答案 0 :(得分:1)

假设您桌面上的文件夹Modst\ZipTest包含以下文件夹和文件:

  • 测试1
      • FILE1.TXT
      • FILE2.TXT
      • File3.txt
    • xxx.txt
  • 的Test2
      • FILE1.TXT
      • FILE2.TXT
      • File3.txt
    • yyy.txt
  • Test3的
      • FILE1.TXT
      • FILE2.TXT
      • File3.txt
    • zzz.txt

结果应该是在Win子文件夹中添加到同一子文件夹中的* .zip文件中的所有丢失文件的文件和文件夹列表之后。

  • 测试1
      • Test1.zip
    • xxx.txt
  • 的Test2
      • Test2.zip
    • yyy.txt
  • Test3的
      • Test3.zip
    • zzz.txt

然后可以使用 WinRAR

使用此批处理代码实现此目的
@echo off
for /D %%A in ("%USERPROFILE%\Desktop\Modst\ZipTest\*") do (
   "%ProgramFiles%\WinRAR\WinRAR.exe" m -afzip -cfg- -ed -ep -ibck -inul -m5 -tl -u -y "%%~A\Win\%%~nA.zip" "%%~A\Win\*"
)

优点是 WinRAR 仅删除已成功添加到存档的文件。 WinRAR想要读取文件内容以进行压缩时锁定的所有文件仍保留在文件夹中。不知道是否在执行压缩和删除文件时,此批处理文件是否被执行。

7zip 解决方案需要批处理文件中的更多命令:

@echo off
for /D %%A in ("%USERPROFILE%\Desktop\Modst\ZipTest\*") do (
    "%ProgramFiles%\7-Zip\7z.exe" u -tzip -mx=9 -y "%%~A\%%~nA_tmp.zip" "%%~A\Win\*">nul
    if not errorlevel 1 (
        del /F /Q "%%~A\Win\*"
        move "%%~A\%%~nA_tmp.zip" "%%~A\Win\%%~nA.zip"
    ) else (
        if exist "%%~A\%%~nA_tmp.zip" del "%%~A\%%~nA_tmp.zip"
    )
)

如果每个文件在删除之前确实已添加到存档中,则不会进行测试。如果在压缩Win子文件夹中的任何文件期间发生任何错误,除了父文件夹中的ZIP文件(如果完全创建了ZIP文件),则不会删除任何文件。

注意: WinRAR.exe7z.exe的路径在您的计算机上可能有所不同,在这种情况下必须以批处理代码进行调整。