这也可以用
WinRAR来完成,而不需要使用批处理文件,虽然不完全符合要求,但与所需的相似。
- 启动WinRAR并导航到文件夹
c:\rar\
。
- 选择文件夹
temp1
、temp2
和temp3
,然后单击工具栏上的添加按钮。
- 现在将存档名称指定为RAR存档的文件夹,例如
c:\rar\
。
- 切换到文件选项卡,在那里勾选选项将每个文件放入单独的存档中。
- 单击确定按钮。
WinRAR现在在文件夹
c:\rar\
中创建了三个RAR存档,分别命名为
temp1.rar
、
temp2.rar
和
temp3.rar
,每个存档都包含相应的文件夹及其所有文件和子文件夹。
在“文件”选项卡上,您可以通过在“要排除的文件”中输入例如“*.txt”来更改要添加的文件列表,以便在创建存档时忽略这三个文件夹中的文本文件。
最后,在“文件”选项卡下方的编辑字段中输入“*.jpg”是有意义的,因为JPEG文件通常已经包含了压缩数据,所以“WinRAR”无法进一步压缩这些文件的数据。
这里还有一个批处理文件的解决方案,可以将目录下所有非隐藏子文件夹及其子文件夹中的文件移动到以每个子文件夹名称命名的存档文件中。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "RAREXE=Rar.exe"
if exist "%RAREXE%" goto CreateArchives
if exist "%ProgramFiles%\WinRAR\Rar.exe" set "RAREXE=%ProgramFiles%\WinRAR\Rar.exe" & goto CreateArchives
if exist "%ProgramFiles(x86)%\WinRAR\Rar.exe" set "RAREXE=%ProgramFiles(x86)%\WinRAR\Rar.exe" & goto CreateArchives
for /F "skip=2 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v Path 2^>nul') do (
if /I "%%I" == "Path" if exist "%%~K\Rar.exe" for %%L in ("%%~K\Rar.exe") do set "RAREXE=%%~fL" & goto CreateArchives
)
for /F "skip=2 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe query "HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v Path 2^>nul') do (
if /I "%%I" == "Path" if exist "%%~K\Rar.exe" for %%L in ("%%~K\Rar.exe") do set "RAREXE=%%~fL" & goto CreateArchives
)
for /F "delims=" %%I in ('%SystemRoot%\System32\where.exe Rar.exe 2^>nul') do set "RAREXE=%%I" & goto CreateArchives
echo ERROR: Could not find Rar.exe!
echo(
echo Please define the variable RAREXE at top of the batch file
echo "%~f0"
echo with the full qualified file name of the executable Rar.exe.
echo(
pause
exit /B
:CreateArchives
set "Error="
for /D %%I in ("c:\rar\*") do (
echo Creating RAR archive for "%%I" ...
"%RAREXE%" m -@ -cfg- -ep1 -idq -m3 -msgif;png;jpg;rar;zip -r -s- -tl -y -- "%%I\%%~nxI.rar" "%%I\"
if errorlevel 1 set "Error=1"
)
if defined Error echo/& pause
endlocal
在定义环境变量RAREXE时,可以省略从"set "RAREXE=Rar.exe""到":CreateArchives"之间的行,只需正确设置完整的文件名。
请阅读位于WinRAR程序文件夹中的文本文件Rar.txt,了解RAR命令m和所使用的开关的说明。问题中没有提供任何有关如何创建RAR存档的选项信息。
为了理解所使用的命令及其工作原理,请打开一个命令提示符窗口,在其中执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
call /?
... 解释了 %~f0
... 批处理文件的完整名称
echo /?
endlocal /?
exit /?
for /?
goto /?
if /?
pause /?
reg /?
reg query /?
set /?
setlocal /?
where /?
另请参阅使用Windows批处理文件执行多个命令的单行,以了解运算符&
的解释。
阅读Microsoft关于
使用命令重定向运算符的文档,以了解
2>nul
的解释。在三个
FOR命令行中,重定向运算符
>
必须用插入字符
^
进行转义,以便在Windows命令解释器处理此命令行之前将其解释为字面字符,然后执行嵌入的
reg
或
where
命令行,并使用单独启动的后台命令进程来执行。
Rar.exe
无法创建 ZIP 压缩文件。只有使用WinRAR.exe
才能完成这个任务,但需要对开关列表进行一些更改。使用-ep1
时,Rar.exe
和WinRAR.exe
都不会将目录本身添加到压缩文件中,并且让目录路径以反斜杠结尾,而我的代码则是这样做的。参见:如何使用 WinRAR 命令行批处理压缩一个文件夹? - Mofi