基于文件名指定URL上传:Slack机器人按单元码分渠道传报告问题
我来帮你搞定这个基于Batch+Curl的Slack文件上传系统,刚好我之前做过类似的场景,给你梳理一套可行的方案:
核心思路拆解
你的需求本质是**「文件名规则匹配→频道映射→批量调用Slack API上传」**的流程,用Batch脚本就能完美实现,结合Windows任务计划器还能自动化执行。关键要解决两个核心点:
- 从PDF文件名中精准提取
UNIT_CODE - 把
UNIT_CODE映射到对应的Slack频道ID(注意:Slack API上传需要频道ID,不是频道名称,这点很重要)
具体实现步骤
1. 准备Slack权限与Token
首先得在Slack后台创建一个Bot应用:
- 给Bot添加
files:write权限,生成Bot Token(格式类似xoxb-xxxxxx-xxxxxx-xxxxxx) - 把这个Bot手动加入所有目标上传频道,否则会提示无权限上传
2. 编写Batch上传脚本
下面是完整的可复用脚本,你只需要替换配置部分的参数即可:
@echo off setlocal enabledelayedexpansion :: -------------------------- 配置参数(请根据实际修改) -------------------------- set "REPORT_FOLDER=C:\Your\Report\Storage\Path" :: 存放报告PDF的文件夹 set "SLACK_TOKEN=xoxb-Your-Bot-Token-Here" :: 你的Slack Bot Token set "DONE_FOLDER=C:\Your\Report\Done\Path" :: 上传完成后文件的归档文件夹 :: ----------------------------------------------------------------------------- :: 创建归档文件夹(如果不存在) if not exist "%DONE_FOLDER%" mkdir "%DONE_FOLDER%" :: 遍历文件夹中所有PDF文件 for %%f in ("%REPORT_FOLDER%\*.pdf") do ( :: 从文件名提取UNIT_CODE(按下划线分割,取第一个字段) for /f "tokens=1 delims=_" %%a in ("%%~nxf") do set "UNIT_CODE=%%a" :: 映射UNIT_CODE到Slack频道ID(请替换成你的实际频道ID) set "CHANNEL_ID=" if "!UNIT_CODE!"=="MX001" set "CHANNEL_ID=U12345678" :: Unit A的频道ID if "!UNIT_CODE!"=="MH001" set "CHANNEL_ID=U87654321" :: Unit B的频道ID if "!UNIT_CODE!"=="MX002" set "CHANNEL_ID=U11223344" :: Unit C的频道ID :: 可继续添加更多UNIT_CODE与频道ID的映射 :: 如果匹配到有效频道ID,执行上传 if not "!CHANNEL_ID!"=="" ( echo 正在上传文件: %%~nxf 到频道(UNIT: !UNIT_CODE!) curl -F file="@%%~f" -F channels=!CHANNEL_ID! -F token=%SLACK_TOKEN% https://slack.com/api/files.upload :: 上传成功后归档文件(避免重复上传) if !errorlevel! equ 0 ( move "%%~f" "%DONE_FOLDER%\" echo 上传完成,文件已归档 ) else ( echo 上传失败,请检查Token权限或网络连接 ) ) else ( echo 未找到UNIT_CODE: !UNIT_CODE!对应的频道配置,跳过该文件 ) ) endlocal pause
脚本关键说明
enabledelayedexpansion:启用延迟变量扩展,确保在for循环中能动态读取变量值%%~nxf:提取文件的完整文件名(不含路径),方便分割UNIT_CODEcurl命令:用表单提交方式上传文件,-F file=@"文件路径"指定要上传的文件,-F channels=频道ID指定目标频道errorlevel:判断curl命令是否执行成功,成功则归档文件
3. 配置Windows任务计划器自动化执行
- 打开任务计划器,点击「创建基本任务」
- 设置触发条件(比如每天凌晨2点)
- 操作选择「启动程序」,程序选择
cmd.exe,参数填写:/c "C:\Path\To\Your\Upload_Script.bat" - 勾选「不管用户是否登录都要运行」,并设置「最高权限运行」(避免文件访问权限问题)
- 完成任务创建,测试运行一次确认效果
常见问题排查
- Curl上传报错:检查Bot Token是否正确、Bot是否加入目标频道、
files:write权限是否已开启 - UNIT_CODE提取失败:确保文件名严格遵循
[UNIT_CODE]_ReportName_Date.pdf格式,UNIT_CODE部分无下划线 - 重复上传:如果不需要重复上传,务必保留归档文件的逻辑,或者在脚本中记录已上传的文件名清单
内容的提问来源于stack exchange,提问作者Richard Pangalila
相关产品推荐
相关产品推荐

