有没有人知道如何使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%
的东西来删除文件,但在这种情况下它会删除整个文件夹:(
示例我有以下这些文件夹:
这些文件夹包含以下文件夹:
我需要压缩WIN文件夹中的所有文件:
因此,对于每个文件夹,它都应该在Win文件夹中进行存档,并在win文件夹中包含所有文件。 如果一切顺利,它应该删除已存档的文件。
这样可以在BAT文件中创建吗?
答案 0 :(得分:1)
假设您桌面上的文件夹Modst\ZipTest
包含以下文件夹和文件:
结果应该是在Win
子文件夹中添加到同一子文件夹中的* .zip文件中的所有丢失文件的文件和文件夹列表之后。
然后可以使用 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.exe
或7z.exe
的路径在您的计算机上可能有所不同,在这种情况下必须以批处理代码进行调整。