把Win解压缩塞进批处理脚本,我踩了三个坑才搞明白它不支持管道
昨天想偷个懒,把日志压缩包的解压流程写成批处理,结果在Win解压缩上直接卡住了。
背景:每天要处理几十个部署包,手动右键解压太慢,想写个脚本循环调用命令行。之前用 7-Zip 的 7z x 跑得好好的,想着 Win解压缩 速度确实快,试试能不能替上。
测试环境:Win10 22H2、Win11 23H2、Server 2019 各一台,Win解压缩 版本号 5.2.1(官网最新),7-Zip 24.08 作对照。
坑 1:命令行参数藏得深
官方文档里没找到明文的 CLI 说明,最后在安装目录里翻到 WinRAR.exe 风格的命令,但参数名对不上。试了 -x、--extract、/e 都不认,最后发现得用 WinUnzip.exe -o"路径" -d"目标" 这种老式斜杠写法。
坑 2:不支持管道和重定向
我想把解压后的文件列表直接 pipe 给 findstr 过滤,结果 Win解压缩 的命令行版本直接报错退出,说“不支持标准输入输出”。7-Zip 那边 7z l -slt | findstr 跑得飞起。
坑 3:中文路径加空格就崩
目标路径带中文和空格时,不加引号会截断,加了引号偶尔还会把路径里的空格当参数分隔符。同一批文件用 7-Zip 加引号一次性过,Win解压缩 得用短路径(8.3 格式)绕过去。
实测数据(解压 1.2GB 日志包,机械盘):
- Win解压缩 命令行:平均 42s,CPU 峰值 38%,但脚本得额外处理路径转义
- 7-Zip 命令行:平均 47s,CPU 峰值 31%,管道和通配符原生支持
速度上 Win解压缩 确实快一点,但脚本化场景下,多出来的路径处理和错误重试逻辑把这点优势吃掉了。
结论:普通用户双击解压,Win解压缩 没问题,速度快、界面简单。但要做自动化、批量、管道处理,还是 7-Zip 更稳。我现在是两套并存:手动解压用 Win解压缩,脚本跑批用 7-Zip。
抛个问题:你们有没有试过用 Win解压缩 的 CLI 做循环解压嵌套压缩包?我这边只要遇到包里套包,命令行就只解第一层,不知道是参数问题还是本身就不支持递归。
