压缩子目录
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 循环,外循环 运行 在当前目录中处理目录 Files1
和 Files2
以及内循环在这些子目录上处理目录 files11
、files12
、files21
、files22
和 运行 Rar。
第一批代码创建归档文件
Files1\files11.rar
Files1\files12.rar
Files2\files21.rar
Files2\files22.rar
存档目录 files11
、files12
、files21
、files22
包含在每个存档中。
@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 个存档文件,但存档目录 files11
、files12
、files21
、files22
未添加到存档中。
@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 /?
我正在尝试用这样的结构压缩我的子目录
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 循环,外循环 运行 在当前目录中处理目录 Files1
和 Files2
以及内循环在这些子目录上处理目录 files11
、files12
、files21
、files22
和 运行 Rar。
第一批代码创建归档文件
Files1\files11.rar
Files1\files12.rar
Files2\files21.rar
Files2\files22.rar
存档目录 files11
、files12
、files21
、files22
包含在每个存档中。
@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 个存档文件,但存档目录 files11
、files12
、files21
、files22
未添加到存档中。
@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 /?