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

Posted

技术标签:

【中文标题】所有文件夹中的 7-Zip 文件(多个档案)【英文标题】:7-Zip files in all folders (multiple archives) 【发布时间】:2015-02-20 09:43:21 【问题描述】:

如何让 7-Zip 递归地归档一个文件夹中所有父文件夹的所有文件?

目前我有这个:

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 文件中创建吗?

【问题讨论】:

@Mofi 我知道我可以让它进入子目录,对于“ME”来说,最难的部分是让它像一个“For”循环,所以它会遍历所有这些文件夹并且只压缩内容Win 文件夹,同时将内容存档在同一位置。这就是我正在努力解决的问题,你说这可以在 WinRAR 中完成吗?你介意详细说明一下吗? 【参考方案1】:

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

测试1 文件1.txt 文件2.txt 文件3.txt xxx.txt 测试2 文件1.txt 文件2.txt 文件3.txt yyy.txt 测试3 文件1.txt 文件2.txt 文件3.txt zzz.txt

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

测试1 Test1.zip xxx.txt 测试2 Test2.zip yyy.txt 测试3 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 想要读取文件内容进行压缩时,所有被锁定的文件都保留在文件夹中。不知道这个批处理文件是否执行过,而要压缩和删除的文件当前被另一个应用程序写入文件夹中。

7-Zip 解决方案需要在批处理文件中包含更多命令:

@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 的路径在您的计算机上可能不同,在这种情况下必须在批处理代码中进行调整。

【讨论】:

解释得很好,“WinRAR 只删除成功添加到存档中的文件”,这在处理可能导致系统崩溃的大量数据时非常重要。您的解决方案就像一个魅力,您能解释一下这个 ""%%~A\Win\%%~nA.zip"" 是如何工作的吗?我看到 %%A 是加载到变量中的路径位置,但是“~”和“n”在这里扮演什么角色? 在命令提示符窗口中运行 for /? 并得到解释 %%~A(循环变量 A 的字符串,不带双引号)和 %%~nA(只是文件/目录的名称,没有路径和扩展名) 在控制台窗口页面中此命令输出的帮助下。运行带有参数/? 的命令或应用程序通常会在 Windows 上输出此命令/应用程序的帮助。

以上是关于所有文件夹中的 7-Zip 文件(多个档案)的主要内容,如果未能解决你的问题,请参考以下文章

盘点一些主流压缩格式的优缺点-zip/RAR/7-zip

用win rar压缩的文件能用7-ZIP解压吗

用win rar压缩的文件能用7-ZIP解压吗

如何在多个zip文件中添加文件?

重命名档案中的多个文件

7z是到底啥文件 7z文件要怎么打开