压缩子目录

Compress subdirectories

我正在尝试用这样的结构压缩我的子目录

Files1\files11\...(files)
Files1\files12\...(files)
Files2\files21\...(files)
Files2\files22\...(files)

我想把它压缩成

Files1\files11.rar
Files1\files12.rar
Files2\files21.rar
Files2\files22.rar

不删除原始文件夹。

我试过这个脚本

for /d %%d in (*\*) do ("C:\Program Files\WinRAR\Rar.exe" a -m5 -s "%%d.rar" "%%d")

但它只适用于一个级别。 我也试过 Batch file to compress subdirectories 但由于某种原因它不起作用。它抛出文件未找到错误。

谢谢

Windows 命令行不支持 file/folder 路径中文件夹的通配符。 *\* 因此无效。

需要两个嵌套的 FOR 循环,外循环 运行 在当前目录中处理目录 Files1Files2 以及内循环在这些子目录上处理目录 files11files12files21files22 和 运行 Rar

第一批代码创建归档文件

Files1\files11.rar
Files1\files12.rar
Files2\files21.rar
Files2\files22.rar

存档目录 files11files12files21files22 包含在每个存档中。

@echo off
set "CompressionError=0"

rem Set directory of batch file as working directory.
pushd "%~dp0"

rem For each directory in working directory run a second loop which
rem compresses each subdirectory of current directory to a RAR archive
rem with deleting all files and subdirectories as well as the archived
rem directory itself and name the archive file like the archived directory.

for /D %%D in (*) do (
    for /D %%F in ("%%D\*") do (
        "%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -df -ep1 -idq -m5 -md4m -r -s -y "%%F.rar" "%%F"
        if errorlevel 1 set "CompressionError=1"
    )
)

rem Restore the previous working directory.
popd

rem Halt batch processing if any error occurred on any compression.
if "%CompressionError%" == "1" pause
set "CompressionError="

第二批代码也创建了 4 个存档文件,但存档目录 files11files12files21files22 未添加到存档中。

@echo off
set "CompressionError=0"

rem Set directory of batch file as working directory.
pushd "%~dp0"

rem For each directory in working directory run a second loop which
rem compresses each subdirectory of current directory to a RAR archive
rem with deleting all files and subdirectories as well as the archived
rem directory itself and name the archive file like the archived directory.

for /D %%D in (*) do (
    for /D %%F in ("%%D\*") do (
        "%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -df -ep1 -idq -m5 -md4m -r -s -y "%%F.rar" "%%F\"
        if errorlevel 1 (
            set "CompressionError=1"
        ) else (
            rd "%%F"
        )
    )
)

rem Restore the previous working directory.
popd

rem Halt batch processing if any error occurred on any compression.
if "%CompressionError%" == "1" pause
set "CompressionError="

WinRAR 的程序文件文件夹中的文本文件 Rar.txt 中查找有关使用的 Rar 开关的详细信息,这是手册WinRAR.

控制台版本

这两个批处理文件在执行过程中都不会显示任何内容,如果没有发生错误则自动退出。但如果发生任何压缩错误,批处理将在结束时停止,以便批处理用户可以查看 Rar 输出到控制台 window.

的错误消息

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • call /? 解释 %~dp0(参数 0 的驱动器和路径 - 批处理文件)
  • echo /?
  • for /?
  • if /?
  • pause /?
  • popd /?
  • pushd /?
  • rd /?
  • rem /?
  • set /?