Win11一键打包并唤起 QQ:汇报项目材料的自动化脚本
Win11一键打包并唤起 QQ:汇报项目材料的自动化脚本
每周把几个项目文件夹手动压缩、改名、再打开 QQ 拖进去发出去——这套动作重复又琐碎。这篇博客拆解一个 60 行的
.bat脚本,它能在几秒内完成"打包 + 唤起 QQ"的全部准备工作,让你只负责最后一拖一发。
一、它解决了什么痛点
项目周报/汇报材料通常有几个固定动作:
- 把本周涉及的项目目录(可能分散在多个路径)分别打成压缩包;
- 文件名要规范,比如
部门_姓名_项目名_日期.rar,方便对方归档; - 体积大的目录(如
node_modules)不能打进去; - 打好包后打开 QQ,找到对应联系人,把压缩包发过去。
手工做前两步特别容易出错(漏打某个目录、日期写错、忘了排除依赖目录)。这个脚本把 1~3 步完全自动化,第 4 步用一行 PowerShell 把 QQ 窗口提到最前,省去你满桌面找 QQ 图标的功夫。
二、完整脚本
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: ==============================================
:: 【集中配置区 —— 下面所有变量随便改】
:: ==============================================
:: --- 工具路径 ---
set "WINRAR_PATH=C:\Program Files\WinRAR\WinRAR.exe" :: WinRAR 安装路径
set "QQ_PATH=D:\Program Files\Tencent\QQNT\QQ.exe" :: QQ 安装路径
:: --- 输出目录(压缩包统一放在这里) ---
set "OUTPUT_DIR=F:\脚本"
:: --- 压缩包文件名前缀 ---
set "NAME_PREFIX=部门_姓名_"
:: --- 排除目录里的文件:node_modules(前端依赖)与 target(Java/Maven 构建产物)下的文件不打进压缩包,空的文件夹壳仍会保留 ---
set "EXCLUDE_DIR=-x*\node_modules\* -x*\target\*"
:: --- ⬇ 要打包的源目录(多个用英文逗号分隔) ⬇ ---
set "SRC_LIST=F:\脚本\项目一,F:\脚本\项目二,F:\脚本\项目三"
:: ==============================================
:: 获取当前日期(yyMMdd,例:260731)
:: ==============================================
for /f "delims=" %%a in ('%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -Command "Get-Date -Format 'yyMMdd'"') do set "DATE_STR=%%a"
:: ==============================================
:: 若输出目录不存在则自动创建
:: ==============================================
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
:: ==============================================
:: 逐个压缩
:: ==============================================
set "IDX=0"
for %%d in (%SRC_LIST%) do (
set /a IDX+=1
for %%p in ("%%d") do set "DIR_NAME=%%~np"
echo.
echo [!IDX!] 正在压缩:%%d
"%WINRAR_PATH%" a -r -ep1 -o+ %EXCLUDE_DIR% "%OUTPUT_DIR%\%NAME_PREFIX%!DIR_NAME!_%DATE_STR%.rar" "%%d" >nul
)
:: ==============================================
:: 压缩完成 → 激活已登录的 QQ(没找到才启动)
:: ==============================================
echo.
echo ==============================
echo 压缩完成!正在打开输出文件夹并唤起 QQ...
echo ==============================
:: 打开QQ窗口,如果已经打开聊天框,会把QQ窗口挪到最前面
powershell -Command "Add-Type -AssemblyName Microsoft.VisualBasic; $p = Get-Process QQ -ErrorAction SilentlyContinue | Where-Object {$_.MainWindowTitle -ne ''} | Select-Object -First 1; if ($p) { [Microsoft.VisualBasic.Interaction]::AppActivate($p.Id) } else { Start-Process $env:QQ_PATH }"
:: 打开输出文件夹,方便直接看到/拖出刚生成的压缩包(放在最后,确保文件夹窗口停在最前)
start "" "%OUTPUT_DIR%"
echo.
echo 全部任务完成!
echo.
pause
exit

三、逐段拆解
1. 环境与编码(第 1~3 行)
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
@echo off:关闭命令回显,让运行界面更干净。chcp 65001:把控制台代码页切到 UTF-8,否则脚本里的中文注释/路径在部分系统上会乱码(后面那句>nul是为了不打印这条命令本身)。setlocal enabledelayedexpansion:关键。它在for循环里用!IDX!、!DIR_NAME!这种延迟环境变量展开。没有它,循环内取到的变量值会是循环开始前的值,序号永远停在 0。
2. 集中配置区(第 5~23 行)
把所有"会变的东西"都提成了变量,改路径/名单时只动这里:
| 变量 | 含义 | 注意点 |
|---|---|---|
WINRAR_PATH |
WinRAR 可执行文件路径 | 需本机已安装 WinRAR;路径含空格要用引号包住(脚本已包) |
QQ_PATH |
QQ(QQNT 版)路径 | 旧版 QQ 路径不同,按本机实际填 |
OUTPUT_DIR |
压缩包输出目录 | 不存在会自动创建 |
NAME_PREFIX |
文件名前缀 | 例如 部门_姓名_,后面自动接项目名和日期 |
EXCLUDE_DIR |
排除规则 | 这里排除 node_modules 和 target(Java/Maven 构建产物)目录里的文件,空的文件夹壳可能仍保留,可叠加多条 -x |
SRC_LIST |
待打包目录清单 | 英文逗号分隔,多个项目直接往后加 |
小技巧:
SRC_LIST用逗号分隔,bat 的for %%d in (...)会按逗号/空格自动切分成多项,所以天然支持多目录遍历。
3. 取当前日期(第 28 行)
for /f "delims=" %%a in ('... powershell ... Get-Date -Format "yyMMdd"') do set "DATE_STR=%%a"
bat 自带的 %date% 格式随系统区域设置变化,不可靠。这里借 PowerShell 的 Get-Date 拿到稳定的 yyMMdd(如 260731),保证文件名里的日期永远一致。
4. 自动建目录(第 33 行)
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
第一次用也不用提前建文件夹,脚本自己兜底。
5. 逐个压缩(第 38~46 行)
for %%d in (%SRC_LIST%) do (
set /a IDX+=1
for %%p in ("%%d") do set "DIR_NAME=%%~np"
"%WINRAR_PATH%" a -r -ep1 -o+ %EXCLUDE_DIR% "%OUTPUT_DIR%\%NAME_PREFIX%!DIR_NAME!_%DATE_STR%.rar" "%%d" >nul
)
核心的 WinRAR 命令行参数:
a:把文件添加进压缩包(archive)。-r:递归处理子目录。-ep1:排除基路径。否则压缩包里会带上F:\脚本\项目一\...这种绝对路径前缀;加它后包内只剩项目一\...,对方解压出来干干净净。-o+:同名文件直接覆盖,不用弹确认框卡住脚本。%EXCLUDE_DIR%:即前面的-x*\node_modules\* -x*\target\*,不把这两个目录里的文件(前端依赖、Java/Maven 构建产物.class/打包中间文件等)打进压缩包,能大幅减小体积;但空的node_modules/target文件夹壳通常仍会留在包里。>nul:压缩过程不打印到屏幕,只保留脚本自己的进度提示。
%%~np 取出目录名(去掉盘符和路径),拼成最终文件名:部门_姓名_项目一_260731.rar。
6. 唤起 QQ(第 57 行)
Add-Type -AssemblyName Microsoft.VisualBasic;
$p = Get-Process QQ -ErrorAction SilentlyContinue | Where-Object {$_.MainWindowTitle -ne ''} | Select-Object -First 1;
if ($p) { [Microsoft.VisualBasic.Interaction]::AppActivate($p.Id) } else { Start-Process $env:QQ_PATH }
这段 PowerShell 做了两件事:
- 如果 QQ 已经登录(存在有窗口标题的
QQ进程),用AppActivate把它提到最前,省你手动切窗口; - 如果没运行,就
Start-Process启动它(路径取自环境变量$env:QQ_PATH)。
PowerShell 之后还有一行:
start "" "%OUTPUT_DIR%"
它会用资源管理器打开压缩包所在的输出目录,让你直接看到、拖出刚生成的 .rar 文件。这一步特意放在 QQ 激活之后,所以最终文件夹窗口停在最前、QQ 在其后待命,发材料时两个窗口都随手可得。
注意:脚本只负责把 QQ 弄到眼前、把输出文件夹打开,不会自动选择联系人、也不会自动发文件。最后那一步"拖文件进对话框 → 发送"还是要你自己来——这样也避免了误发给错人的风险。
四、怎么用
- 装好 WinRAR 和 QQ/微信,确认两者安装路径;
- 把脚本里的
WINRAR_PATH、QQ_PATH改成你本机实际路径; - 把
SRC_LIST改成你本周要汇报的项目目录; - 双击运行
.bat,等压缩完成——输出文件夹会自动打开、QQ 也会跳到最前; - 把下刚生成的几个
.rar拖进对应聊天框发送。
五、每周五16:30定时自动执行(可选)
如果希望每周五下午到点自动打包、不用自己记得点开脚本,用 Windows 自带的任务计划程序即可。
方式一:命令行(用管理员 CMD 运行)
schtasks /create /tn "每周五汇报打包" /tr "F:\脚本\rarWeeklyAndQQ.bat" /sc weekly /d FRI /st 16:30
/sc weekly /d FRI→ 每周五触发/st 16:30→ 16:30(24 小时制,即下午 4:30)- 默认安全选项是"只在用户登录时运行",正好让 QQ 窗口和输出文件夹能在你眼前弹出来
- 想删掉这个任务:
schtasks /delete /tn "每周五汇报打包" /f
方式二:图形界面
Win + R→ 输入taskschd.msc回车,打开"任务计划程序";- 右侧"创建基本任务",名称随便填(如"每周五汇报打包");
- 触发器选"每周",勾选星期五,开始时间填
16:30; - 操作选"启动程序",浏览选中
F:\脚本\rarWeeklyAndQQ.bat; - 完成后右键该任务 → "属性" → "安全选项"里确认是"只在用户登录时运行"(否则脚本里唤起 QQ、打开文件夹的窗口不会出现,等于白跑)。
两个注意点
- 去掉
pause:脚本末尾的pause会等待按键,无人值守的自动任务里会卡住不动。定时自动执行时,建议把最后一行pause删掉(手动双击运行时少看一行提示,影响不大)。 - 必须登录着:因为脚本要弹出 QQ 和文件夹窗口,任务要设在你周五 16:30 已经登录电脑的前提下运行;若那时锁屏/未登录,任务会跳过(标记为"未运行"),回来手动跑一次即可。若你真想要"未登录也跑"的无界面版,就得把唤起 QQ、
start打开文件夹、pause这几行都去掉,那又是另一种用法了。



浙公网安备 33010602011771号