你有过这种经历吗:100个项目文件夹需要分别压缩成独立的RAR文件、每个用不同密码、还要放到对应客户名字的子目录里。

鼠标一个一个右键 → 添加到压缩文件 → 输密码 → 选路径 → 等它跑完 → 下一个。做完50个差不多一小时过去了。

WinRAR的命令行模式可以在10秒内完成同样的批量任务——而且一次写成脚本,下次直接双击运行。 本文不讲WinRAR基础安装(这不缺教程),专讲命令行批量操作的实战用法。

WinRAR命令行批量压缩

前置准备:找到RAR.exe

WinRAR安装后自带两个命令行工具:

  • RAR.exe — 创建和管理RAR格式压缩包
  • WinRAR.exeWinRAR.exe 同上但界面操作

RAR.exe 默认路径:C:\Program Files\WinRAR\RAR.exe

如果敲 rar 显示"不是内部命令",把它加入系统PATH:

  1. Win + R → 输入 sysdm.cpl → 高级 → 环境变量
  2. 在系统变量Path里添加 C:\Program Files\WinRAR\
  3. 确定后重新打开命令行窗口

验证:rar 回车看有没有帮助信息出来。

💡 如果WinRAR都还没装,参考WinRAR电脑版免费下载与安装指南

基础命令速查

压缩

rar a -r -ep1 输出文件名.rar 源文件夹\

参数说明:

  • a — add,添加文件到压缩包
  • -r — 递归子文件夹
  • -ep1 — 不包含完整路径(只存相对路径,不存C:\Users...)

解压

rar x 压缩包.rar 目标目录\
  • x — extract with full paths(保持压缩包里的目录结构)
  • 换成 e — extract without paths(所有文件平铺到目标目录)

带密码压缩

rar a -p密码123 -r 加密文件.rar 源文件夹\

分卷压缩(每个分卷100MB)

rar a -v100m 分卷文件.rar 大文件\

输出为 分卷文件.part1.rar分卷文件.part2.rar ……

分卷压缩的详细用法参考RAR分卷压缩与合并解压教程

实战案例1:批量压缩100个文件夹,每个独立成RAR

场景:D:\Projects\ 下有100个客户项目文件夹,每个要独立压缩成 客户名.rar

PowerShell 脚本

$rar = "C:\Program Files\WinRAR\RAR.exe"
Get-ChildItem -Directory D:\Projects | ForEach-Object {
    $out = "D:\Archives\$($_.Name).rar"
    & $rar a -r -ep1 "$out" "$($_.FullName)"
    Write-Host "Done: $($_.Name)"
}

bat 批处理版

@echo off
set RAR=C:\Progra~1\WinRAR\RAR.exe
for /d %%d in (D:\Projects\*) do (
    %RAR% a -r -ep1 "D:\Archives\%%~nd.rar" "%%d"
    echo Done: %%~nd
)

⚠️ 注意:bat中WinRAR的路径如果有空格,用短路径名 C:\Progra~1\WinRAR\RAR.exe 或引号包裹。

实战案例2:按日期归档——每日自动备份

场景:每天下午6点自动把 D:\Work\ 压缩成 Work_20260709.rar 放到备份盘。

PowerShell 脚本 + 计划任务

$rar = "C:\Program Files\WinRAR\RAR.exe"
$date = Get-Date -Format "yyyyMMdd"
$src = "D:\Work"
$dst = "E:\Backup\Work_$date.rar"

# 排除临时文件和node_modules
& $rar a -r -ep1 -x*.tmp -xnode_modules -x.git "$dst" "$src"

# 删除7天前的旧备份
Get-ChildItem E:\Backup\Work_*.rar | Where-Object {
    $_.LastWriteTime -lt (Get-Date).AddDays(-7)
} | Remove-Item

设置定时任务:

  1. Win + R → taskschd.msc
  2. 创建基本任务 → 名称"每日工作备份"→ 触发器"每天18:00"
  3. 操作"启动程序"→ 程序powershell.exe→ 参数-File D:\Scripts\daily-backup.ps1

实战案例3:批量解压后按内容分类

场景:下载了50个压缩包,解压后要按文件类型分类(.docx放一起、.pdf放一起、.jpg放一起)。

$rar = "C:\Program Files\WinRAR\RAR.exe"
$src = "D:\Downloads\*.rar"
$tmp = "D:\Temp\extract"
$doc = "D:\Sorted\Documents"
$pdf = "D:\Sorted\PDFs"
$img = "D:\Sorted\Images"

New-Item -ItemType Directory -Force $tmp, $doc, $pdf, $img

Get-ChildItem $src | ForEach-Object {
    & $rar x -o+ "$($_.FullName)" "$tmp\"
}

# 按类型移动
Get-ChildItem $tmp -Recurse -File | ForEach-Object {
    switch ($_.Extension.ToLower()) {
        {$_ -in ".docx", ".doc", ".txt"} { Move-Item $_.FullName $doc }
        ".pdf" { Move-Item $_.FullName $pdf }
        {$_ -in ".jpg", ".png", ".gif"} { Move-Item $_.FullName $img }
    }
}

批量解压的更多技巧参考RAR批量解压提取指南

实战案例4:分卷加密备份——超100GB的数据安全存储

场景:300GB视频素材需要备份到多个U盘或云盘(单个文件服务上限50GB)。

$rar = "C:\Program Files\WinRAR\RAR.exe"
& $rar a -v50g -p"MyStr0ngP@ss!" -rr10% -hp "D:\Backup\VideoProject" "E:\VideoProjects\*"

参数说明:

  • -v50g — 分卷50GB
  • -p — 设置密码
  • -rr10% — 添加10%恢复记录(防损坏)
  • -hp — 同时加密文件名(不知道密码连文件名都看不到)

加了恢复记录后才能用WinRAR自带的修复功能,原理和操作参考RAR损坏修复指南RAR恢复记录原理与使用教程

命令参数速查表

参数含义示例
a添加文件到压缩包rar a out.rar src\
x解压(保持目录结构)rar x in.rar dest\
e解压(忽略目录结构)rar e in.rar dest\
-r递归子目录rar a -r out.rar src\
-p[密码]加密rar a -p123 out.rar src\
-hp[密码]加密文件名+内容rar a -hp123 out.rar src\
-v[size]分卷大小rar a -v100m out.rar bigfile\
-ep1去掉基路径rar a -ep1 out.rar C:\data\
-x[pattern]排除特定文件rar a -x*.tmp out.rar src\
-rr[N]%添加恢复记录rar a -rr5% out.rar src\
-m0-m5压缩级别-m0最快 -m5最小
-o+覆盖已有文件rar x -o+ in.rar dest\
-t测试压缩包完整性rar t archive.rar
-ibck后台运行rar a -ibck out.rar src\

为什么要用命令行而不是图形界面?

三个场景下命令行完胜:

  1. 100个以上的批量任务:GUI一个接一个点几小时,CLI一行命令搞定
  2. 定时自动化:配合计划任务,无人值守自动备份
  3. 服务器环境:远程桌面连上去只有命令行的Windows Server,没有桌面环境可操作

日常偶尔压几个文件 → 右键菜单最方便。批量处理 → 命令行最快。

WinRAR一键解压所有和右键菜单修复参考WinRAR右键菜单修复

常见问题

Q: 命令行压缩的RAR文件和右键菜单"添加到压缩文件"效果一样吗?

完全一样——都用同一个RAR.exe引擎,压缩率、格式完全一致。区别只是操作方式不同。

Q: 批量压缩时电脑CPU占满会不会卡死?

默认不会——WinRAR命令行模式有自己的CPU调度。如果同时做其他事觉得卡,加 -m0 降低压缩级别(只打包不压缩,极快但体积几乎不变小)。或者在任务管理器里把 RAR.exe 进程的优先级调到"低于正常"。或者加 -ibck 让它在后台以最低优先级运行。

Q: 密码可不可以从文件里读取而不是写在命令里?

PowerShell可以直接读取:

$pass = Get-Content D:\secure\password.txt
& $rar a "-p$pass" out.rar src\

但注意密码文件本身需要保护好——放在加密文件夹或BitLocker加密的分区里。

Q: 压缩到一半电脑断电了,生成的半成品RAR能挽救吗?

如果建压缩包时加了 -rr 恢复记录 → 有一定机会能用WinRAR的修复功能恢复。没加恢复记录 → 半成品RAR文件通常是损坏的,需要重压。这也是备份重要文件时建议加 -rr10% 的原因——多出10%的额外体积换一个防损坏保险。

Q: 能不能只把指定扩展名的文件打包,其他忽略?

可以,用两个方法:

方法一(指定包含):rar a out.rar D:\src\*.pdf D:\src\*.docx — 只打包pdf和docx

方法二(排出不想要的):rar a -x*.tmp -x*.log -xnode_modules out.rar D:\src\ — 打包全部但排除tmp/log/node_modules

两种方法可以混用。

Q: 不同RAR压缩级别的体积和速度差多少?

(实测条件:混合文件10GB,包含文档/图片/视频)

级别大小耗时
-m0(仅存储)10GB15秒
-m3(默认)6.5GB3分20秒
-m5(最大压缩)6.1GB8分45秒

结论:-m3是性价比最高的设置。-m5只比-m3小约6%,但时间翻倍多——除非存储极其珍贵、带宽极其宝贵→没必要。