Fork me on GitHub

Win11一键打包并唤起 QQ:汇报项目材料的自动化脚本

Win11一键打包并唤起 QQ:汇报项目材料的自动化脚本

每周把几个项目文件夹手动压缩、改名、再打开 QQ 拖进去发出去——这套动作重复又琐碎。这篇博客拆解一个 60 行的 .bat 脚本,它能在几秒内完成"打包 + 唤起 QQ"的全部准备工作,让你只负责最后一拖一发。

一、它解决了什么痛点

项目周报/汇报材料通常有几个固定动作:

  1. 把本周涉及的项目目录(可能分散在多个路径)分别打成压缩包;
  2. 文件名要规范,比如 部门_姓名_项目名_日期.rar,方便对方归档;
  3. 体积大的目录(如 node_modules)不能打进去;
  4. 打好包后打开 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

image

三、逐段拆解

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_modulestarget(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 弄到眼前、把输出文件夹打开,不会自动选择联系人、也不会自动发文件。最后那一步"拖文件进对话框 → 发送"还是要你自己来——这样也避免了误发给错人的风险。

四、怎么用

  1. 装好 WinRARQQ/微信,确认两者安装路径;
  2. 把脚本里的 WINRAR_PATHQQ_PATH 改成你本机实际路径;
  3. SRC_LIST 改成你本周要汇报的项目目录;
  4. 双击运行 .bat,等压缩完成——输出文件夹会自动打开、QQ 也会跳到最前;
  5. 把下刚生成的几个 .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

方式二:图形界面

  1. Win + R → 输入 taskschd.msc 回车,打开"任务计划程序";
  2. 右侧"创建基本任务",名称随便填(如"每周五汇报打包");
  3. 触发器选"每周",勾选星期五,开始时间填 16:30
  4. 操作选"启动程序",浏览选中 F:\脚本\rarWeeklyAndQQ.bat
  5. 完成后右键该任务 → "属性" → "安全选项"里确认是"只在用户登录时运行"(否则脚本里唤起 QQ、打开文件夹的窗口不会出现,等于白跑)。

两个注意点

  • 去掉 pause:脚本末尾的 pause 会等待按键,无人值守的自动任务里会卡住不动。定时自动执行时,建议把最后一行 pause 删掉(手动双击运行时少看一行提示,影响不大)。
  • 必须登录着:因为脚本要弹出 QQ 和文件夹窗口,任务要设在你周五 16:30 已经登录电脑的前提下运行;若那时锁屏/未登录,任务会跳过(标记为"未运行"),回来手动跑一次即可。若你真想要"未登录也跑"的无界面版,就得把唤起 QQ、start 打开文件夹、pause 这几行都去掉,那又是另一种用法了。

image

posted @ 2026-08-01 21:26  秋夜雨巷  阅读(11)  评论(0)    收藏  举报