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