我要解压缩主文件夹中某些子文件夹中的所有文件,解压缩后删除xxx.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")
但是我想要将解压缩文件的每个子文件夹立即移动到“New-Location”文件夹中,而不仅仅是在主文件夹中解压缩所有文件后。
我需要在代码中更改一些想法吗?
答案 0 :(得分: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
控制台版本Rar.exe
比大多数用户从未阅读存储在 WinRAR 的程序文件文件夹中的手册Rar.txt
更强大。
可以直接使用Rar.exe
解压缩源文件夹的所有子文件夹中的所有* .rar文件,因为批处理代码中不使用 for 循环。 Rar.exe
支持解压缩RAR存档文件的通配符,并且在命令-r
上使用切换x
会导致处理所有子文件夹中的所有RAR存档文件,如手册所述。
如果所有归档包含唯一的文件夹名称,或者所有归档都应该从 RAR 命令行中删除,那么
选项-ad
意味着将归档名称附加到目标路径被解压缩到同一目录中,覆盖之前解压缩的先前存档中的现有文件。 -ad
的用法取决于存档文件的内容。
选项-idq
表示安静模式,即仅输出错误消息,但没有更快的进度信息。
在解压缩后删除所有* .rar文件也是在没有 for 循环的情况下完成的,因为命令 del 还支持删除所有子文件夹中的所有* .rar文件一个文件夹。
修改强>
要删除所有RAR文件后删除源文件夹中所有子文件夹,但保留源文件夹,最后需要 for 循环添加到上面的代码中。
命令 rd 会忽略子文件夹不为空,因为未使用参数/S /Q
会删除子文件夹,即使该文件夹尚未完全为空。
如果要删除的子文件夹不为空, rd 输出到 stderr 的错误消息会重定向到设备 nul 以禁止它。< / p>
要在解压缩所有RAR压缩文件后删除源文件夹的所有子文件夹,而不管这些子文件夹包含哪些子文件夹,但保留源文件夹,上面的最后两行批处理代码需要替换为以下行:
for /D %%D in ("%SourceFolder%\*") do rd /S /Q "%%D" 2>nul
要删除包含其所有子文件夹的源文件夹,上面的最后两行批处理代码需要替换为以下行:
rd /S /Q "%SourceFolder%" 2>nul
注意:只有当文件夹不是Windows上任何正在运行的进程的当前工作目录时,才能通过 rd 删除该文件夹。
可以通过打开命令提示符窗口并在那里运行来读取批处理文件中使用的每个命令的帮助:
del /?
for /?
if /?
md /?
rd /?
set /?
"%ProgramFiles%\WinRAR\Rar.exe" /?