首页 > 解决方案 > 批量递归压缩所有嵌套子目录

问题描述

我有一个具有以下结构的文件夹:

Year
    Month
        Day
            file
            file
            file
        Day 
            file
            file
Year
    Month
        Day
            file
            file
            file
        Day 
            file
            file

我想压缩所有“Day”文件夹以便稍后移动它们。

到目前为止,我已经尝试了一些我在 SO 上找到的替代方案,但我似乎无法得到我需要的结果,而且我什至无法通过自己的尝试克服语法错误。这是我到目前为止所拥有的:

for /d %%A in (C:\test) do
    for /d %%B in (C:\test\*) do 
        for /d %%C in (C:\test\*\*) do
            "C:\Program Files\WinRAR\rar.exe" a -r -u -rr 

标签: windowsbatch-filecmd

解决方案


通配符只允许在路径的最后一个元素中使用,所以类似C:\test\*\*的东西不起作用。

无论如何,您非常接近解决方案:

for /D %%Y in ("C:\test\*") do (
    for /D %%M in ("%%~Y\*") do (
        for /D %%D in ("%%~M\*") do (
            pushd "%%~D" && (
                rar a -r -u -rr "..\%%~nD.rar" "*.*"
                popd
            )
        )
    )
)

do您只是忘记在关键字所在的同一行继续循环主体(注意(此处同一行的开头),并且您错过了在内部循环中使用外部循环的for循环元变量。

这应该创建由文件夹命名并位于文件夹中的.rar存档文件。如果您希望将它们放入文件夹中,只需从.DayMonthDay..\..\%%~nD.rar" "*.*

pushdpopd用于临时更改为当前Day目录,因此存档包含相对于该目录而不是根目录或其他内容的路径。


推荐阅读