这个小批处理代码希望能够满足您的需求。
@echo off
set "SourceFolder=C:\Users\Unpack"
set "TargetFolder=C:\Users\New-Location"
if not exist "%TargetFolder%" md "%TargetFolder%"
"%ProgramFiles%\WinRAR\Rar.exe" x -ad -cfg- -idq -r -y "%SourceFolder%\*.rar" "%TargetFolder%"
del /F /Q /S "%SourceFolder%\*.rar">nul
for /D %%D in ("%SourceFolder%\*") do rd "%%D" 2>nul
主机版Rar.exe
比大多数从不阅读手册的用户更强大Rar.txt
存储在程序文件夹中WinRAR都知道。
可以直接解压源文件夹所有子文件夹中的所有 *.rar 文件Rar.exe
可以看出,因为没有for批处理代码中使用了循环。Rar.exe
支持解压 RAR 压缩文件时使用通配符并切换-r
按命令使用x
导致处理所有 RAR 存档文件以及所有子文件夹中的文件,如手册所述。
Option -ad
意义将存档名称附加到目标路径可以从中删除RAR命令行,如果所有存档都包含唯一的文件夹名称,或者所有存档应解压到同一目录中,并覆盖之前解压的先前存档中的现有文件。的用法-ad
取决于存档文件的内容。
Option -idq
表示安静模式,即只输出错误消息,但不输出进度信息,速度更快。
解压后删除所有 *.rar 文件也不需要for循环作为命令del还支持删除文件夹所有子文件夹中的所有 *.rar 文件。
Edit:
要在删除所有 RAR 文件后删除源文件夹中的所有子文件夹为空,但保留源文件夹,for循环最终是必要的,如添加到上面的代码中一样。
命令忽略不为空的子文件夹rd因为参数/S /Q
不使用会删除子文件夹,即使尚未完全清空。
错误信息为rd输出到stderr如果要删除的子文件夹不为空,则重定向到设备nul来压制它。
要在解压所有 RAR 压缩包后删除源文件夹的所有子文件夹(无论这些子文件夹包含什么内容),但保留源文件夹,上面批处理代码的最后两行需要替换为以下行:
for /D %%D in ("%SourceFolder%\*") do rd /S /Q "%%D" 2>nul
为了删除源文件夹及其所有子文件夹,上面批处理代码的最后两行需要替换为以下行:
rd /S /Q "%SourceFolder%" 2>nul
注意:可以通过以下方式删除文件夹rd仅当它不是 Windows 上任何正在运行的进程的当前工作目录时。
可以通过打开命令提示符窗口并在其中运行来阅读批处理文件中使用的每个命令的帮助:
del /?
for /?
if /?
md /?
rd /?
set /?
"%ProgramFiles%\WinRAR\Rar.exe" /?