如何为批量重命名图片的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])
错误原因分析
- 路径类型判断错误:第一个参数是图片文件夹,但代码用
os.path.isfile()判断,文件夹不是文件,直接触发错误。 - 参数数量检查逻辑错误:循环结束后判断
i < 2,当传入2个参数时i=1,会误触发“需要三个参数”的错误。 - 未定义
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
相关产品推荐
相关产品推荐

