如何解压文件夹所有子文件夹中的所有 rar 档案,然后删除档案?
How to unpack all rar archives in all subfolders of a folder and then delete the archives?
我想解压主文件夹中某些子文件夹中的所有文件,解压后删除 xxx.rar 个文件,并将包含这些文件的文件夹移动到另一个位置。
- 主文件夹
- 子文件夹 1 (包含 .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")
但我希望所有解压文件的子文件夹立即移动到 "New-Location" 文件夹,而不是在主文件夹中解压所有内容后才移动。
一些想法我必须在代码中更改什么?
这个小批处理代码有望满足您的需求。
@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.exe
解压源文件夹所有子文件夹中的所有*.rar文件,因为没有使用for循环批号。 Rar.exe
支持解压缩 RAR 存档文件时使用通配符,并且在命令 x
上使用开关 -r
会导致处理所有子文件夹中的所有 RAR 存档文件,如手册所述。
选项 -ad
意思是 append archive name to destination path 如果所有压缩文件都包含唯一的文件夹名称,或者所有档案都应该解压到同一个目录中,并覆盖之前解压的先前档案中的现有文件。 -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
并且要删除源文件夹及其所有子文件夹,上面的最后两行批处理代码需要替换为以下行:
rd /S /Q "%SourceFolder%" 2>nul
注意:仅当文件夹不是 Windows 上任何 运行ning 进程的当前工作目录时,才能通过 rd 删除文件夹。
可以通过打开命令提示符 window 和 运行 来阅读批处理文件中使用的每个命令的帮助:
del /?
for /?
if /?
md /?
rd /?
set /?
"%ProgramFiles%\WinRAR\Rar.exe" /?
我想解压主文件夹中某些子文件夹中的所有文件,解压后删除 xxx.rar 个文件,并将包含这些文件的文件夹移动到另一个位置。
- 主文件夹
- 子文件夹 1 (包含 .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")
但我希望所有解压文件的子文件夹立即移动到 "New-Location" 文件夹,而不是在主文件夹中解压所有内容后才移动。
一些想法我必须在代码中更改什么?
这个小批处理代码有望满足您的需求。
@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.exe
解压源文件夹所有子文件夹中的所有*.rar文件,因为没有使用for循环批号。 Rar.exe
支持解压缩 RAR 存档文件时使用通配符,并且在命令 x
上使用开关 -r
会导致处理所有子文件夹中的所有 RAR 存档文件,如手册所述。
选项 -ad
意思是 append archive name to destination path 如果所有压缩文件都包含唯一的文件夹名称,或者所有档案都应该解压到同一个目录中,并覆盖之前解压的先前档案中的现有文件。 -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
并且要删除源文件夹及其所有子文件夹,上面的最后两行批处理代码需要替换为以下行:
rd /S /Q "%SourceFolder%" 2>nul
注意:仅当文件夹不是 Windows 上任何 运行ning 进程的当前工作目录时,才能通过 rd 删除文件夹。
可以通过打开命令提示符 window 和 运行 来阅读批处理文件中使用的每个命令的帮助:
del /?
for /?
if /?
md /?
rd /?
set /?
"%ProgramFiles%\WinRAR\Rar.exe" /?