[批处理]利用WINRAR批量解压缩

winrar有两个批量解压缩的方式

第一种方法,unrar命令

unrar命令会直接调用命令行进行解压缩。

具体格式为

用法:unrar <命令> -<参数 1> -<参数 N> <压缩文件> <文件...>
               <@列表文件...> <解压路径\>

<命令>
  e             提取文件无需压缩文件的路径
  l[t[a],b]     列出压缩文件内容 [technical[all], bare]
  p             打印文件到 stdout
  t             测试压缩文件
  v[t[a],b]     详细列出压缩文件内容 [technical[all],bare]
  x             使用完整路径提取文件

<参数>
  -             停止参数扫描
  @[+]          禁用 [启用] 文件列表
  ac            压缩或解压后清除存档属性
  ad            添加压缩文件名到目标路径
  ag[格式]      使用当前日期生成压缩文件名
  ai            忽略文件属性
  ap<格式>      添加路径到压缩文件中
  c-            禁用注释显示
  cfg-          禁用读取配置
  cl            转换名称到小写
  cu            转换名称到大写
  dh            打开已共享文件
  ep            从名称里排除路径
  ep3           扩展路径为完整路径包括驱动器盘符
  f             更新文件
  id[c,d,p,q]   禁用信息
  ierr          发送所有消息到 stderr
  inul          禁用所有消息
  ioff          完成操作后关闭电脑
  kb            保留损坏的已解压缩文件
  n<file>       额外的包含过滤器的文件
  n@            从 stdin 读取额外的过滤器掩码
  n@<list>      从列表文件读取额外的过滤器掩码
  o[+|-]        设置覆盖模式
  oc            设置 NTFS 压缩属性
  ol[a]         将符号链接作为链接处理 [绝对路径]
  or            自动重命名文件
  ow            保存或恢复文件所有者和组
  p[password]   设置密码
  p-            不查询密码
  r             递归子目录
  ri<P>[:<S>]   设置优先级 (0-默认,1-最小..15-最大) 和睡眠时间为 ms
  sc<chr>[obj]  指定字符集
  sl<size>      处理小于指定大小的文件
  sm<size>      处理大于指定大小的文件
  ta<date>      处理在 <日期> 之后修改过的文件,以 YYYYMMDDHHMMSS 格式
  tb<date>      处理在 <日期> 之前修改过的文件,以 YYYYMMDDHHMMSS 格式
  tn<time>      处理比 <时间> 较新的文件
  to<time>      处理比 <时间> 较旧的文件
  ts<m,c,a>[N]  保存或恢复文件时间(修改,创建,访问)
  u             更新文件
  v             列出所有分卷
  ver[n]        文件版本控制
  vp            创建每个分卷之前暂停
  x<file>       排除指定的文件
  x@            读取文件名以从 stdin 排除
  x@<list>      排除指定列表文件里列出的文件
  y             对所有询问假定选择“是”

例如:unrar e -ppassword -o+ "E:\CUSA25132 Scarlet Nexus All DLCs- Barquillo.rar" "E:\" 格式中的命令项是必填项。

这个模式最大的问题是配置的参数项过少,比如常用的解压后删除,就没有对应参数。

第二种方法,winrar命令

winrar命令会直接调用winrar进行解压缩。

winrar命令兼容rar和unrar命令的参数。格式也相同

例如:winrar e -ppassword -o+ "E:\CUSA25132 Scarlet Nexus All DLCs- Barquillo.rar" "E:\"

这个模式会调用winrar的压缩和解压的默认配置,也包含解压后删除这种选项,但没有队列概念,必须用批处理文件来做队列,不能直接复制粘贴再cmd里。

下面的代码是一个批处理,将批处理文件所在文件夹及下层文件夹全部解压,并有以下特点

  • 之所以使用winrar命令而不是unrar命令,因为我需要将已经解压完的文件删除,从而区分哪些正常解压哪些没有还需人工处理,批处理很难判断是否正常完成解压缩,所以直接使用rar配置中的解压后删除即可
  • 使用了先进行part类分卷压缩包解压并删除,再对未分卷的压缩包进行解压的顺序,并做了三层part1、part01、part001的筛查,避免每个分包都解压的操作
  • 解压所到该文件所在的目录,并使用文件名作为解压文件夹,之前使用winrar命令时,他会自动新建不存在的文件夹,但有时又不会,干脆做了一层判断,存在的路径会显示
  • 对于不存在part1的分卷压缩包,由于无法解压缩,干脆做了跳过,跳过的文件会显示

@echo off
setlocal enabledelayedexpansion
set PASSWORD=你的密码
for /r %%i in (*.part1.rar) do (
    set FOLDER_PATH=%%~dpi%%~ni
    if exist !FOLDER_PATH! (
      echo !FOLDER_PATH!
      ) else (
      md "!FOLDER_PATH!"
      )
    winrar e -p!PASSWORD! -o+ "%%i" "!FOLDER_PATH!"    
)
for /r %%i in (*.part01.rar) do (
    set FOLDER_PATH=%%~dpi%%~ni
    if exist !FOLDER_PATH! (
      echo !FOLDER_PATH!
      ) else (
      md "!FOLDER_PATH!"
      )
    winrar e -p!PASSWORD! -o+ "%%i" "!FOLDER_PATH!"
)
for /r %%i in (*.part001.rar) do (
    set FOLDER_PATH=%%~dpi%%~ni
    if exist !FOLDER_PATH! (
      echo !FOLDER_PATH!
      ) else (
      md "!FOLDER_PATH!"
      )
    winrar e -p!PASSWORD! -o+ "%%i" "!FOLDER_PATH!"
)
for /r %%i in (*.rar) do (
    set FOLDER_PATH=%%~dpi%%~ni
    set file_name=%%~ni
    if not "!file_name:.part=!"=="!file_name!" (
        echo Skipping !file_name!
    ) else (
        if exist !FOLDER_PATH! (
           echo !FOLDER_PATH!
        ) else (
           md "!FOLDER_PATH!"
        )
    winrar e -p!PASSWORD! -o+ "%%i" "!FOLDER_PATH!"
    )
)
pause

原创文章,作者:熊阿初,如若转载,请注明出处:https://www.guofc.com/764.html

(0)
熊阿初的头像熊阿初
上一篇 2022年12月11日
下一篇 2023年2月6日

相关推荐

发表回复

登录后才能评论