如何解压缩文件夹的所有子文件夹中的所有rar存档,然后删除存档?

BAS*_*ASF 3 batch-file rar unpack winrar

我想解压缩在主文件夹中的一些子文件夹中的所有文件,在解压缩后删除xxx.rar文件并将包含文件的文件夹移动到另一个位置.

  • 主文件夹
    • Sub Folder1 (带.rar文件)
    • 文件夹2 (带.rar文件)
    • 文件夹3 (带.rar文件)

这个我的批处理脚本到目前为止工作.

SET "sourcefolder=C:\Users\Unpack"
FOR /R %sourcefolder% %%X in (*.rar) do (
    pushd "%%~dpX"
    "C:\Program Files\WinRAR\Rar.exe" x -y "%%X" "*.*" && del "*.rar"
    popd
)
for /d /r %sourcefolder% %%x in (*) do move "%%x" "C:\Users\New-Location")
Run Code Online (Sandbox Code Playgroud)

但是我想要将其文件解压缩的每个子文件夹立即移动到"New-Location"文件夹,而不仅仅是在主文件夹中解压缩所有内容之后.

我需要在代码中改变一些想法吗?

Mof*_*ofi 5

这个小批量代码有希望做你想要的.

@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
Run Code Online (Sandbox Code Playgroud)

控制台版本Rar.exe比大多数用户从未阅读Rar.txt存储在WinRAR程序文件文件夹中的手册更强大.

解压缩源文件夹的所有子文件夹中的所有*.rar文件可以直接完成,Rar.exe因为可以看到,因为批处理代码中没有使用for循环.Rar.exe支持解压缩RAR存档文件的通配符和-r用于命令x结果的切换,以便在所有子文件夹中处理所有RAR存档文件,如手册中所述.

如果所有存档都包含唯一的文件夹名称,则可以从RAR命令行中删除存档名称到目标路径的选项-ad含义,或者应将所有存档解压缩到同一目录中,并覆盖之前解压缩的先前存档中的现有文件.用法取决于存档文件的内容.-ad

选项-idq意味着安静模式,即仅输出错误消息,但没有更快的进度信息.

解包后删除所有*.rar文件也是在没有for循环的情况下完成的,因为命令del还支持删除文件夹的所有子文件夹中的所有*.rar文件.

编辑:

为了删除所有RAR文件后删除源文件夹中的所有子文件夹,但保留源文件夹,最后需要一个for循环添加到上面的代码中.

命令rd忽略子文件夹不为空,因为/S /Q没有使用会删除子文件夹的参数,即使它们已经完全没空.

如果要删除的子文件夹不为空,则rd输出到stderr的错误消息将重定向到设备nul以禁止它.

要在解压缩所有RAR压缩文件后独立删除源文件夹的所有子文件夹,但保留源文件夹,上面的最后两行批处理代码需要替换为以下行:

for /D %%D in ("%SourceFolder%\*") do rd /S /Q "%%D" 2>nul
Run Code Online (Sandbox Code Playgroud)

要删除包含其所有子文件夹的源文件夹,上面的最后两行批处理代码需要替换为以下行:

rd /S /Q "%SourceFolder%" 2>nul
Run Code Online (Sandbox Code Playgroud)

注意:只有当文件夹不是Windows上任何正在运行的进程的当前工作目录时,才可以通过rd删除该文件夹.

可以通过打开命令提示符窗口并在那里运行来读取批处理文件中使用的每个命令的帮助:

  • del /?
  • for /?
  • if /?
  • md /?
  • rd /?
  • set /?
  • "%ProgramFiles%\WinRAR\Rar.exe" /?