压缩子目录

时间:2016-01-13 08:56:28

标签: windows batch-file compression rar

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

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但由于某种原因它不起作用。它会抛出找不到文件的错误。

由于

1 个答案:

答案 0 :(得分:0)

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

当前目录中运行的外部循环需要两个嵌套的 FOR 循环,处理目录Files1Files2,并使用内部循环处理目录files11,在这些子目录上files12files21files22并运行 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 输出到控制台窗口的错误消息。

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

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