Windows命令行不支持通配符在文件/文件夹路径的文件夹。 *\*
因此无效。
两个嵌套的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="
看在程序文本文件Rar.txt
文件的WinRAR的文件夹上使用的的RAR开关细节是为了控制台版本的WinRAR手册。
这两个批处理文件都不会在执行过程中显示任何内容,如果没有错误发生,它们将自动退出。但是,如果发生任何压缩错误,批处理将暂停,以便批处理用户可以查看Rar输出的错误消息到控制台窗口。
为了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
call /?
解释%~dp0
(驱动器和参数0的路径 - 批处理文件)
echo /?
for /?
if /?
pause /?
popd /?
pushd /?
rd /?
rem /?
set /?
感谢。虽然有些东西我仍然不明白。 1.为什么在批处理文件的最后一步将CompressionError设置为空? – christantoan
2. %% D和%% F代表目录和文件吗? – christantoan
'set“CompressionError = 0”'也可以是'set'CompressionError =“'保证没有环境变量'CompressionError'值为'1',在此批处理脚本之外偶然定义,导致停止批处理此批处理脚本的结尾。 '%% D'和'%% F'是目录的循环变量。目录'Files1'和'Files2'以及'%% F'的'%% D'作为相对于当前目录的子目录,如'Files1 \ files11'。添加到外部循环'echo %% D'和内部循环'echo %% F'使得您可以查看循环变量值。 – Mofi