AI 编程实战:用 qwencode 批量重命名图片+生成 Excel 导入表(附完整代码)
从零安装 qwencode 到跑通批量处理脚本:覆盖 Node.js 环境配置、OpenAI 兼容通道对接、settings.json 与 config.toml 参数详解,附带图片重命名+Excel 导入表生成完整 Python 代码,开发者可直接复制运行,分钟级落地电商素材批量处理与自动化工作流。

处理电商素材目录时,常遇到这样的结构:一个主文件夹下挂几十个子文件夹,图片命名规则分 “2 级” 和 “3 级” 两套。手工逐一重命名效率低,漏改概率不低。更务实的做法是让 AI 编程工具生成一段 Python 脚本,前提是工具本身接入了稳定、统一的模型通道。这篇文章按 “装好工具 → 配通通道 → 生成脚本 → 跑一次验证” 的顺序走一遍,命令和配置可以直接复制。
一、qwencode 是什么,以及它和普通 AI 对话有什么不同
qwencode 是 Qwen Code 的命令行形态,阿里开源,基于 Gemini CLI 改造,针对 Qwen3-Coder 系列模型做了专门优化。它和网页版 AI 的核心区别在于:你在项目目录里敲 qwen,它就能读文件、改代码、生成脚本、解释报错,直接操作本地代码库。对于日常泡在终端里的开发者,省掉了反复切窗口、粘贴代码的步骤。
Qwen Code 本身是一个 agentic 命令行工作流工具,支持 function-calls,可以把 “分析合并请求”“批量调整代码风格” 这类多步操作拆成一次次工具调用来完成。它的开源仓库目前在 GitHub 上有 17.4k star,更新频率稳定。
二、安装:Node.js 版本是硬性门槛
qwencode 对 Node.js 版本有明确要求。官方 Quickstart 文档建议 Node.js 22 或更高版本,部分教程和 KDnuggets 的实操文章则以 Node.js 20 为最低线。稳妥起见,直接上 20 以上。
检查当前版本:
node -v
npm -v输出低于 v20 就去 Node.js 官网下载 LTS 版本,安装后重启终端让环境变量生效。
安装命令全平台通用:
npm install -g @qwen-code/qwen-code@latest如果提示权限不足,macOS/Linux 在前面加 sudo。不想全局安装的话,可以用官方一键脚本,macOS/Linux 执行:
curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen-standalone.sh | bashWindows 在管理员 CMD 里跑对应的 .bat 脚本即可。
验证安装:
qwen --version能打印版本号就说明安装成功。提示 command not found 多半是 npm 全局 bin 目录没进 PATH,用 npm config get prefix 看一下路径,手动加进去或者直接重启终端。
三、通道准备:为什么值得用统一入口
qwencode 默认支持 OpenAI 兼容协议,核心配置是两个东西:base_url 和 api_key。如果你同时用 Claude Code、其他 CLI 工具或者脚本里的 SDK 调用,每个工具各配一套 Key 和地址,管理起来很碎。
统一通道的价值在于收敛密钥管理。以 koalaapi 为例,API 入口以控制台提供的 Base URL 为准,兼容 OpenAI 协议。qwencode、其他兼容工具都指向它,一个 Key 覆盖多个运行时,轮换时只改一处。
Key 在控制台创建后只完整显示一次,复制出来存好。注意 base_url 后面不加任何查询参数或路径后缀 —— 手动追加 /v1 或 /chat/completions 是导致 404 的最常见原因。
四、配置:settings.json 与 config.toml 的关键字段
qwencode 的配置分两层。settings.json 管工具行为和模型通道,config.toml 管模型参数。用户级 settings.json 默认位于~/.qwen/settings.json,Windows 下是 C:\Users <用户名>.qwen\settings.json。项目级配置放在项目根目录的 .qwen/settings.json,优先级高于用户级,适合给不同项目配不同模型。
settings.json 关键字段
{
"auto_execute": false,
"work_dir": "./excel_task",
"timeout_seconds": 120,
"max_retries": 2,
"log_level": "info"
}auto_execute 保持 false,让 AI 生成代码后先人工确认再执行,避免脚本直接改动磁盘文件。work_dir 指向实际工作目录。timeout_seconds 给 120 秒,遍历几十个文件夹并写入 Excel 的耗时通常远低于此。max_retries 设 2,应对偶发的网络抖动。
如果想在 settings.json 里直接声明模型通道,可以用 modelProviders 字段:
{
"modelProviders": {
"openai": [{
"id": "qwen3-coder-plus",
"name": "Qwen3 Coder Plus",
"baseUrl": "https://koalaapi.com/v1",
"envKey": "OPENAI_API_KEY"
}]
}
}envKey 指向存放 Key 的环境变量名,比直接写死在配置文件里更安全。也可以在 .env 文件里配 OPENAI_BASE_URL 和 OPENAI_API_KEY,环境变量的优先级高于 settings.json。
config.toml 模型参数
[model]
provider = "openai-compatible"
base_url = "https://koalaapi.com/v1"
api_key = "sk-你的Key"
model = "你的模型标识"
[model.params]
temperature = 0.2
max_tokens = 4096provider 填 openai-compatible,因为统一通道走的是 OpenAI 兼容协议。temperature = 0.2 是经验值 —— 代码生成这类任务要的是稳定输出,不需要发散。max_tokens 给 4096 能覆盖大多数单文件脚本的生成请求,特别长的脚本可以往上调。
改完配置重启 qwencode 使其生效。
五、验证通道是否通了
配置写好后,先做一个低风险的连通性测试。在 qwencode 里输入一句最简单的请求:
> 用 Python 打印当前目录下的所有文件夹名
如果能正常返回代码,说明 base_url 和 Key 都对了。报 401 就去检查 Key 是不是前后带了空格或换行。报 404 多半是 base_url 多写了路径后缀 —— 正确写法就是通道平台提供的基础地址,不要手动追加 /v1 或 /chat/completions,这些路径由工具自己拼接。
六、生成脚本:从重命名到 Excel 导入表
连通性没问题之后,把真实需求整理成一段清晰的提示词发给 qwencode。需求是这样的:
> 遍历当前目录下每个子文件夹,图片名含 “2 级” 改为 “大牌 - 文件夹名”,含 “3 级” 改为 “大牌 - 文件夹名 - 1”,后缀不变。然后读取 “大牌导入.xls” 模板,从第二行开始写入:第一列用 uuid4 生成随机 ID,第二列填图片名不含后缀,第三列固定 “上衣”,第六列在文件名含 “-1” 时填 1、否则填文件夹名,第七列在含 “-1” 时留空、否则填一个固定 UUID。
qwencode 生成的脚本核心结构如下:
import os, uuid, openpyxl
FIXED_UUID = "F09B4EBE-2AF1-4B49-9FC6-B77EFF919853"
def rename_images(root):
for folder in os.listdir(root):
fp = os.path.join(root, folder)
if not os.path.isdir(fp):
continue
for fname in os.listdir(fp):
name, ext = os.path.splitext(fname)
if "2级" in name:
new = f"大牌-{folder}{ext}"
elif "3级" in name:
new = f"大牌-{folder}-1{ext}"
else:
continue
os.rename(os.path.join(fp, fname), os.path.join(fp, new))
def build_excel(root, template, output):
wb = openpyxl.load_workbook(template)
ws = wb.active
row = 2
for folder in os.listdir(root):
fp = os.path.join(root, folder)
if not os.path.isdir(fp):
continue
for fname in os.listdir(fp):
name, ext = os.path.splitext(fname)
if ext.lower() not in (".jpg", ".png", ".jpeg"):
continue
ws.cell(row=row, column=1, value=str(uuid.uuid4()))
ws.cell(row=row, column=2, value=name)
ws.cell(row=row, column=3, value="上衣")
if "-1" in name:
ws.cell(row=row, column=6, value=1)
ws.cell(row=row, column=7, value="")
else:
ws.cell(row=row, column=6, value=folder)
ws.cell(row=row, column=7, value=FIXED_UUID)
row += 1
wb.save(output)
if __name__ == "__main__":
rename_images(".")
build_excel(".", "大牌导入.xls", "导入结果.xlsx")保存为 batch_excel.py,确保 “大牌导入.xls” 模板在同一目录,执行 python batch_excel.py。跑完打开 “导入结果.xlsx”,列值应该和上面逻辑一致。整个流程从生成到跑通,几分钟的事。
七、几个容易卡住的地方
401 Unauthorized:Key 前后可能有不可见字符。从控制台重新复制,逐字符核对。注意 Qwen OAuth 免费通道已于 2026 年 4 月停用,如果之前用的是 OAuth 方式,需要切换到 API Key 模式。
404 Not Found:base_url 被手动追加了路径。正确值就是通道平台提供的基础地址,别自己拼。
Excel 没生成:检查模板文件是否在工作目录,或者文件名是否完全匹配。openpyxl 找不到模板会直接抛异常。
图片没被重命名:文件名里不含 “2 级” 或 “3 级” 字符串。注意全角和半角的差异,“2 級” 这类繁体写法不会被当前条件匹配。
uuid 每次不同:uuid4 本身基于随机数,这是预期行为。需要固定值就替换成常量字符串。
脚本会直接改动磁盘文件名,第一次跑之前对原始目录做个完整备份,确认逻辑对了再上正式环境。
八、统一通道真正省掉的是什么
把 AI 编程工具接入统一 API 通道,收益不主要在单次调用成本上,而在密钥管理的收敛。qwencode、其他 CLI 工具、脚本里的 SDK 调用,共用同一组 Key 和 Base URL,轮换时只改一处。聚合网关在这一层的价值是协议抽象和访问控制,让开发者用一套凭据覆盖多个模型供应商。koalaapi 的定位与此一致,核心思路是把多供应商的接入复杂度收拢到一个入口,减少在多工具之间反复翻配置的摩擦。对于需要频繁切换模型或管理多个 API Key 的团队,这类聚合层的工程价值比较实际。
配置文件里 Key 不要提交到 Git 仓库。建议放在环境变量或者单独的 .env 文件里,.gitignore 把配置文件排除掉。settings.json 中的字符串值支持 $VAR_NAME 或 ${VAR_NAME} 语法引用环境变量,加载时会自动解析。
了解更多: https://koalaapi.com/

