You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为批量重命名图片的Python脚本添加源路径参数

实现Python脚本的外部目录运行功能(通过cmd.bat传递路径参数)

我想给我的Python脚本添加路径参数功能,让它能通过cmd.bat在外部目录下运行。

示例cmd.bat

echo off
    Rename.py [Folder_Images] [listname.txt]
pause

原Rename.py脚本代码

import pathlib

IMG_DIR = pathlib.Path('.\Folder_Images')

with open('listname.txt') as jabber:
    content = jabber.read().splitlines()
    director = sorted(IMG_DIR.iterdir())
    for src, dest in zip(director, content):
        src.rename(IMG_DIR / f'{dest}{src.suffix}')

尝试添加的代码及错误

我添加了以下代码后,出现了“文件不存在”的错误:

if __name__ == '__main__':
    import os
    import sys
    source_paths = []
    if len(sys.argv) > 1:
        for i, path in enumerate(sys.argv[1:]):
            if i < 2 and not os.path.isfile(path):
                raise ValueError(f'Not a valid path or file does not exist: {path}')
            source_paths.append(path)        
        if i < 2:
            raise ValueError(f'Three path arguments needed')
        source_paths = source_paths[0:2]
        source_paths = [os.path.abspath(path)  for path in source_paths]
        Rename(source_paths[0], source_paths[1])

错误原因分析

  1. 路径类型判断错误:第一个参数是图片文件夹,但代码用os.path.isfile()判断,文件夹不是文件,直接触发错误。
  2. 参数数量检查逻辑错误:循环结束后判断i < 2,当传入2个参数时i=1,会误触发“需要三个参数”的错误。
  3. 未定义Rename函数:原脚本是直接执行逻辑,没有封装成函数,调用Rename()会报错。

修正后的完整脚本

import pathlib
import sys

def rename_images(img_dir_path, list_file_path):
    IMG_DIR = pathlib.Path(img_dir_path)
    # 验证图片文件夹是否存在
    if not IMG_DIR.is_dir():
        raise ValueError(f"指定的图片文件夹不存在: {img_dir_path}")
    
    list_file = pathlib.Path(list_file_path)
    # 验证列表文件是否存在
    if not list_file.is_file():
        raise ValueError(f"指定的列表文件不存在: {list_file_path}")

    with open(list_file, 'r') as jabber:
        content = jabber.read().splitlines()
        # 仅处理文件夹内的文件,排除子文件夹
        director = sorted([item for item in IMG_DIR.iterdir() if item.is_file()])
        # 检查文件数量与列表行数是否匹配
        if len(director) != len(content):
            raise ValueError(f"图片数量({len(director)})和列表行数({len(content)})不匹配")
        
        for src, dest in zip(director, content):
            src.rename(IMG_DIR / f'{dest}{src.suffix}')

if __name__ == '__main__':
    # 检查参数数量是否正确
    if len(sys.argv) != 3:
        print("用法: Rename.py [图片文件夹路径] [列表文件路径]")
        sys.exit(1)
    
    img_dir = sys.argv[1]
    list_file = sys.argv[2]
    
    try:
        rename_images(img_dir, list_file)
        print("重命名完成")
    except ValueError as e:
        print(f"错误: {e}")
        sys.exit(1)

修正点说明

  • 将原脚本逻辑封装为rename_images函数,便于接收外部参数调用。
  • 分别用is_dir()和is_file()验证文件夹、文件路径,避免类型判断错误。
  • 直接通过len(sys.argv)检查参数数量,逻辑更直观。
  • 添加文件数量与列表行数匹配的检查,避免部分文件无对应命名或命名溢出。
  • 增加异常捕获,输出友好的错误提示。

正确的cmd.bat示例

如果路径包含空格,需要用双引号包裹:

@echo off
Rename.py "D:\外部图片文件夹" "D:\listname.txt"
pause

内容的提问来源于stack exchange,提问作者jastinmalkom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:42:53