gpt4 book ai didi

batch-file - 如何解压文件夹所有子文件夹中的所有 rar 文件,然后删除文件?

转载 作者:行者123 更新时间:2023-12-03 16:48:04 28 4
gpt4 key购买 nike

我想解压主文件夹中某些子文件夹中的所有文件,解压后删除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 表示将压缩文件名称附加到目标路径 如果所有压缩文件都包含一个唯一的文件夹名称,则可以从 RAR 命令行中删除,或者所有文件都应该解压到同一个目录中,并覆盖之前解压的先前文件中的现有文件。 -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 上任何正在运行的进程的当前工作目录时,才可以通过 rd 删除该文件夹。

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

  • del/?
  • for/?
  • 如果/?
  • md/?
  • rd/?
  • 设置/?
  • "%ProgramFiles%\WinRAR\Rar.exe"/?

关于batch-file - 如何解压文件夹所有子文件夹中的所有 rar 文件,然后删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com