采集了1000张商品图片,文件名都是 IMG_1234.jpg,想按商品ID重命名为 商品ID_主图.jpg。
或者每天采集完数据后,需要把当天的截图和Excel打包成ZIP,按日期命名。
解决方案:用影刀的“运行命令行”指令调用系统命令,或用Python的 os、shutil、zipfile 模块实现文件操作自动化。
一、影刀中处理文件的三种方式
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 影刀自带指令 | 读取/写入文本、创建文件夹、删除文件 | 简单直观 | 功能有限 |
| 运行命令行 | 批量重命名、复制、移动 | 执行快速 | 需懂命令行语法 |
| Python代码 | 压缩解压、递归遍历、复杂逻辑 | 功能强大 | 需要写代码 |
推荐:简单操作用自带指令或命令行,复杂操作用Python。
二、影刀自带的文件指令速查
| 指令 | 功能 | 位置 |
|------|------|------|
|
创建文件夹 | 新建目录 | 文件处理 |
| 删除文件夹 | 删除目录(及内容) | 文件处理 |
| 复制文件 | 复制单个文件 | 文件处理 |
|
移动文件 | 移动/重命名文件 | 文件处理 |
| 删除文件 | 删除单个文件 | 文件处理 |
| 文件是否存在 | 判断文件是否存在 | 文件处理 |
| 获取文件夹下文件列表 | 列出目录内容 | 文件处理 |
自带指令的局限:
- 不支持批量重命名(需要循环+移动文件)
- 不支持压缩解压
- 不支持递归遍历子文件夹
三、实战1:批量重命名文件(自带指令法)
场景:C:\images\ 下有 1.jpg, 2.jpg ... 要重命名为 product_1.jpg, product_2.jpg ...
操作步骤:
获取文件夹下文件列表→ 输出{file_list}列表循环{file_list},当前项{file_name}- 用
字符串替换或截取字符串提取原文件名中的数字部分 - 构造新文件名:
"product_" + 数字部分 + ".jpg" 移动文件:原路径C:\images\{file_name},新路径C:\images\{new_name}(移动即重命名)
# 简化:用Python代码更直接
import os
folder = r"C:\images"
for filename in os.listdir(folder):
if filename.endswith(".jpg"):
# 提取数字部分
num = filename.split(".")[0] # 假设文件名就是数字
new_name = f"product_{num}.jpg"
os.rename(
os.path.join(folder, filename),

os.path.join(folder, new_name)
)
四、实战2:批量移动文件(按日期归档)
场景:每天采集的Excel和截图放在 C:\output\,想按日期移动到 C:\archive\2025-06-09\。
操作步骤:
- 获取当前日期
{today}(格式yyyy-MM-dd) - 用
创建文件夹创建C:\archive\{today} 获取文件夹下文件列表获取C:\output\下所有文件- 循环移动每个文件到目标文件夹
# 用Python移动
import os, shutil, datetime
source = r"C:\output"
target_base = r"C:\archive"
today = datetime.datetime.now().strftime("%Y-%m-%d")
target = os.path.join(target_base, today)
os.makedirs(target, exist_ok=True)
for file in os.listdir(source):
src_path = os.path.join(source, file)
if os.path.isfile(src_path):
shutil.move(src_path, os.path.join(target, file))
五、实战3:压缩文件夹为ZIP
场景:每天采集完后,把当天的所有文件打包成 采集报告_20250609.zip。
Python代码(使用 zipfile 模块):
import os
import zipfile
from datetime import datetime
source_folder = r"C:\output"
today = datetime.now().strftime("%Y%m%d")
zip_name = rf"C:\archives\采集报告_{today}.zip"
with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(source_folder):
for file in files:
file_path = os.path.join(root, file)
# 在zip中保持相对路径
arcname = os.path.relpath(file_path, source_folder)
zipf.write(file_path, arcname)
print(f"压缩完成:{zip_name}")
影刀集成:将上述代码放入 Python代码 指令,设置输入参数 in_folder 和 out_zip_path。
六、实战4:解压ZIP文件
场景:从网上下载的素材包是ZIP格式,需要自动解压到指定目录。
import zipfile
zip_path = r"C:\downloads\素材包.zip"
extract_to = r"C:\素材"
with zipfile.ZipFile(zip_path, 'r') as zipf:
zipf.extractall(extract_to)
注意:解压时可能遇到中文文件名乱码,可以指定编码 zipf.extractall(extract_to, pwd=None),或改用 shutil.unpack_archive。
七、用命令行实现快速批量操作(Windows)
| 操作 | 命令行 | 在影刀中执行 |
|---|---|---|
| 复制所有txt文件 | copy C:\src\*.txt C:\dst\ | 运行命令行 |
| 移动所有jpg | move C:\src\*.jpg C:\dst\ | 运行命令行 |
| 删除7天前的文件 | forfiles /p C:\logs /s /d -7 /c "cmd /c del @file" | 运行命令行 |
| 重命名批量文件 | ren C:\images\*.jpg product_*.jpg(有限制) | 运行命令行 |
批量重命名高级版(使用PowerShell):
Get-ChildItem C:\images\*.jpg | ForEach-Object { Rename-Item $_ -NewName ("product_" + $_.Name) }
在影刀中调用:powershell -Command "命令内容"
八、定时清理旧文件(自动化运维)
场景:日志文件夹越来越大,需要定期删除30天前的文件。
import os, time, datetime
folder = r"C:\logs"
cutoff = datetime.datetime.now() - datetime.timedelta(days=30)
for root, dirs, files in os.walk(folder):
for file in files:
file_path = os.path.join(root, file)
if os.path.getmtime(file_path) < cutoff.timestamp():
os.remove(file_path)
print(f"删除:{file_path}")
将此流程设为每周定时任务,自动维护磁盘空间。
九、常见问题与避坑
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 移动文件时提示“权限不足” | 文件被其他程序打开 | 先关闭占用程序,或跳过 |
| 压缩后中文文件名乱码 | ZIP格式默认编码问题 | 用Python的 zipfile.ZipFile 指定 encoding='gbk'(部分平台) |
| 删除文件失败 | 文件是只读属性 | 先修改属性 os.chmod(file_path, 0o777) |
| 路径包含空格 | 命令行无法识别 | 路径两端加双引号 "C:\My Folder" |
| 获取文件列表时包含子文件夹 | 需要递归 | 用Python的 os.walk |
十、影刀专属操作清单
| 操作 | 精确指令/代码 | 说明 |
|---|---|---|
| 创建文件夹 | 创建文件夹 | 自带指令 |
| 列出文件 | 获取文件夹下文件列表 | 自带指令,不含子文件夹 |
| 移动/重命名 | 移动文件 | 自带指令 |
| 批量重命名 | Python os.rename | 推荐 |
| 压缩 | Python zipfile | 需导入模块 |
| 解压 | Python zipfile | 需导入模块 |
| 删除旧文件 | Python os.remove + os.path.getmtime | 配合定时任务 |
版本差异:社区版和创业版的Python环境都支持 os、shutil、zipfile,无需额外安装。
推荐资源
- Python
shutil文档:高级文件操作(复制树、移动、删除) - Python
pathlib文档:面向对象的路径操作(推荐替代os.path) - Windows
forfiles命令:命令行批量删除
最后一句:文件自动化是RPA流程的“最后一公里”——采集完、清洗完、打包好,才算真正交付。
把常用的文件操作(按日期归档、批量重命名、压缩)封装成子流程,以后每个采集项目都能复用。
作者:林焱
本文为《影刀RPA学习手册》系列番外篇之四。文件处理是RPA开发者的必备技能,值得花时间系统掌握。
