# 影刀RPA进阶教程:文件与文件夹自动

影刀RPA进阶教程:文件与文件夹自动化——批量重命名/移动/压缩/解压

采集了1000张商品图片,文件名都是 IMG_1234.jpg,想按商品ID重命名为 商品ID_主图.jpg
或者每天采集完数据后,需要把当天的截图和Excel打包成ZIP,按日期命名。

解决方案:用影刀的“运行命令行”指令调用系统命令,或用Python的 osshutilzipfile 模块实现文件操作自动化。


一、影刀中处理文件的三种方式

方式适用场景优点缺点
影刀自带指令读取/写入文本、创建文件夹、删除文件简单直观功能有限
运行命令行批量重命名、复制、移动执行快速需懂命令行语法
Python代码压缩解压、递归遍历、复杂逻辑功能强大需要写代码

推荐:简单操作用自带指令或命令行,复杂操作用Python。


二、影刀自带的文件指令速查

| 指令 | 功能 | 位置 |

picture.image |------|------|------| | 创建文件夹 | 新建目录 | 文件处理 | | 删除文件夹 | 删除目录(及内容) | 文件处理 | | 复制文件 | 复制单个文件 | 文件处理 |

picture.image | 移动文件 | 移动/重命名文件 | 文件处理 | | 删除文件 | 删除单个文件 | 文件处理 | | 文件是否存在 | 判断文件是否存在 | 文件处理 | | 获取文件夹下文件列表 | 列出目录内容 | 文件处理 |

picture.image picture.image 自带指令的局限

  • 不支持批量重命名(需要循环+移动文件)
  • 不支持压缩解压
  • 不支持递归遍历子文件夹

picture.image


三、实战1:批量重命名文件(自带指令法)

场景C:\images\ 下有 1.jpg, 2.jpg ... 要重命名为 product_1.jpg, product_2.jpg ...

操作步骤

  1. 获取文件夹下文件列表 → 输出 {file_list}
  2. 列表循环 {file_list},当前项 {file_name}
  3. 字符串替换截取字符串 提取原文件名中的数字部分
  4. 构造新文件名:"product_" + 数字部分 + ".jpg"
  5. 移动文件:原路径 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),
            
![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/5cd761840c9e4e908705ec2771e5facc~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781916893&x-signature=5a1IH%2Bltq0LVac5CXiJ1ZH4x7aY%3D)
            os.path.join(folder, new_name)
        )

picture.image

picture.image

四、实战2:批量移动文件(按日期归档)

场景:每天采集的Excel和截图放在 C:\output\,想按日期移动到 C:\archive\2025-06-09\

操作步骤

  1. 获取当前日期 {today}(格式 yyyy-MM-dd
  2. 创建文件夹 创建 C:\archive\{today}
  3. 获取文件夹下文件列表 获取 C:\output\ 下所有文件
  4. 循环移动每个文件到目标文件夹
# 用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))

picture.image

五、实战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_folderout_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\运行命令行
移动所有jpgmove 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环境都支持 osshutilzipfile,无需额外安装。


推荐资源

  • Python shutil 文档:高级文件操作(复制树、移动、删除)
  • Python pathlib 文档:面向对象的路径操作(推荐替代 os.path
  • Windows forfiles 命令:命令行批量删除

最后一句:文件自动化是RPA流程的“最后一公里”——采集完、清洗完、打包好,才算真正交付。
把常用的文件操作(按日期归档、批量重命名、压缩)封装成子流程,以后每个采集项目都能复用。


作者:林焱

本文为《影刀RPA学习手册》系列番外篇之四。文件处理是RPA开发者的必备技能,值得花时间系统掌握。

0
0
0
0
评论
未登录
暂无评论