文件移动工具 (File Mover)
这是一个简单但功能强大的Python脚本,用于递归遍历目录并将指定格式的文件移动到目标目录。默认支持移动PDF文件,但也可以通过参数指定其他文件格式。
功能特点
- 递归遍历源目录及其所有子目录
- 支持移动任意指定格式的文件
- 自动处理目标目录中的文件重名情况
- 详细的操作日志输出
- 完整的错误处理机制
- 支持命令行参数配置
系统要求
- Python 3.6 或更高版本
- 操作系统:Windows/Linux/MacOS
安装方法
- 克隆或下载此仓库
- 进入项目目录
使用方法
命令行参数
脚本支持以下命令行参数:
-s
或--source
:源目录路径(必需)-t
或--target
:目标目录路径(必需)-e
或--ext
:文件扩展名(可选,默认为 'pdf')
基本用法
-
移动PDF文件(默认):
python move_pdfs.py -s "源目录路径" -t "目标目录路径"
-
移动其他格式文件:
python move_pdfs.py -s "源目录路径" -t "目标目录路径" -e txt
示例
移动PDF文件:
python move_pdfs.py -s "C:\Users\Documents\source" -t "D:\target"
移动TXT文件:
python move_pdfs.py -s "C:\Users\Documents\source" -t "D:\target" -e txt
移动DOCX文件:
python move_pdfs.py -s "C:\Users\Documents\source" -t "D:\target" -e docx
在代码中调用
也可以在Python代码中直接调用移动函数:
from move_pdfs import move_files# 移动PDF文件
move_files(source_dir="源目录路径", target_dir="目标目录路径")# 移动其他格式文件
move_files(source_dir="源目录路径", target_dir="目标目录路径", file_ext=".txt")
注意事项
- 确保有足够的权限访问源目录和目标目录
- 建议在执行前备份重要文件
- 如果目标目录中存在同名文件,脚本会自动添加数字后缀
- 大量文件移动可能需要一定时间,请耐心等待
- 移动过程中会显示详细的操作日志
错误处理
- 脚本会捕获并显示文件移动过程中的错误
- 单个文件的错误不会影响其他文件的移动
- 所有错误都会在控制台中显示详细信息
具体代码如下:
import os
import shutil
from pathlib import Path
import argparsedef move_files(source_dir, target_dir, file_ext='.pdf'):"""递归遍历源目录,移动指定格式的文件到目标目录Args:source_dir (str): 源目录路径target_dir (str): 目标目录路径file_ext (str): 要移动的文件扩展名,默认为.pdf"""# 确保文件扩展名格式正确if not file_ext.startswith('.'):file_ext = '.' + file_ext# 确保目标目录存在if not os.path.exists(target_dir):os.makedirs(target_dir)# 计数器moved_count = 0# 遍历源目录for root, dirs, files in os.walk(source_dir):for file in files:if file.lower().endswith(file_ext.lower()):source_path = os.path.join(root, file)target_path = os.path.join(target_dir, file)# 处理目标路径中的同名文件if os.path.exists(target_path):base, ext = os.path.splitext(file)counter = 1while os.path.exists(target_path):new_name = f"{base}_{counter}{ext}"target_path = os.path.join(target_dir, new_name)counter += 1try:shutil.move(source_path, target_path)print(f"已移动: {source_path} -> {target_path}")moved_count += 1except Exception as e:print(f"移动文件时出错: {source_path}")print(f"错误信息: {str(e)}")print(f"\n完成! 共移动了 {moved_count} 个{file_ext}文件到 {target_dir}")def parse_arguments():"""解析命令行参数"""parser = argparse.ArgumentParser(description='移动指定格式的文件到目标目录')parser.add_argument('--source', '-s', required=True, help='源目录路径')parser.add_argument('--target', '-t', required=True, help='目标目录路径')parser.add_argument('--ext', '-e', default='pdf', help='文件扩展名(不需要包含点号,默认为pdf)')return parser.parse_args()if __name__ == "__main__":args = parse_arguments()# 执行移动操作move_files(args.source, args.target, f'.{args.ext}')