以批处理方式递归压缩所有嵌套的子目录。

问题描述 投票:0回答:1

我有一个文件夹,结构如下。

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

我想把所有的 "日 "文件夹压缩在原地,以便以后移动。

到目前为止,我已经尝试了一些我在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 
windows batch-file cmd
1个回答
2
投票

通配符 只允许在路径的最后一个元素中使用,所以类似于 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 归档文件以 Day 并位于 Month 文件夹。如果你想把它们放到 Day 文件夹代替,只需删除 ..\ 前缀 ..\%%~nD.rar" "*.*.

pushdpopd 是用来临时换成当前的 Day 目录,所以存档中包含的是相对于该目录的路径,而不是根目录之类的。

© www.soinside.com 2019 - 2024. All rights reserved.