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