给文件添加前缀

以下是一个用于给文件添加前缀的 Python 脚本,它能够批量为指定目录下的所有文件添加自定义前缀。脚本包含错误处理功能,可以处理文件重命名过程中可能出现的各种异常情况。

import os
import argparse
from pathlib import Path

def add_prefix_to_files(directory, prefix, recursive=False, dry_run=False):
    """
    为指定目录中的所有文件添加前缀
    
    参数:
    directory (str): 要处理的目录路径
    prefix (str): 要添加的前缀字符串
    recursive (bool): 是否递归处理子目录
    dry_run (bool): 是否进行试运行(不实际修改文件)
    """
    try:
        # 确保目录存在
        if not os.path.exists(directory):
            raise FileNotFoundError(f"指定的目录不存在: {directory}")
        
        if not os.path.isdir(directory):
            raise NotADirectoryError(f"指定的路径不是一个目录: {directory}")
        
        processed_files = 0
        skipped_files = 0
        
        # 获取所有要处理的文件
        if recursive:
            # 递归处理所有子目录
            files = [os.path.join(root, name) 
                    for root, dirs, files in os.walk(directory) 
                    for name in files]
        else:
            # 只处理当前目录
            files = [os.path.join(directory, name) 
                    for name in os.listdir(directory) 
                    if os.path.isfile(os.path.join(directory, name))]
        
        # 处理每个文件
        for file_path in files:
            try:
                # 获取文件的目录和原始文件名
                file_dir = os.path.dirname(file_path)
                original_name = os.path.basename(file_path)
                
                # 构建新的文件名
                new_name = prefix + original_name
                
                # 构建新的文件路径
                new_file_path = os.path.join(file_dir, new_name)
                
                # 如果新文件名已经存在,则跳过
                if os.path.exists(new_file_path):
                    print(f"跳过: {file_path} (新文件名已存在)")
                    skipped_files += 1
                    continue
                
                # 执行重命名操作(或仅打印)
                if dry_run:
                    print(f"将 {original_name} 重命名为 {new_name}")
                else:
                    os.rename(file_path, new_file_path)
                    print(f"已重命名: {original_name} -> {new_name}")
                
                processed_files += 1
            except Exception as e:
                print(f"处理文件 {file_path} 时出错: {e}")
        
        print(f"\n处理完成!")
        print(f"成功处理的文件: {processed_files}")
        print(f"跳过的文件: {skipped_files}")
        
    except Exception as e:
        print(f"操作失败: {e}")

if __name__ == "__main__":
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description='为目录中的文件添加前缀')
    
    # 添加必需的参数
    parser.add_argument('-d', '--directory', required=True, 
                        help='要处理的目录路径')
    parser.add_argument('-p', '--prefix', required=True, 
                        help='要添加的前缀字符串')
    
    # 添加可选参数
    parser.add_argument('-r', '--recursive', action='store_true', 
                        help='递归处理子目录')
    parser.add_argument('-n', '--dry-run', action='store_true', 
                        help='试运行,不实际修改文件')
    
    # 解析命令行参数
    args = parser.parse_args()
    
    # 调用函数执行文件重命名
    add_prefix_to_files(args.directory, args.prefix, args.recursive, args.dry_run)    

使用说明:

  1. 运行前请确保已安装 Python 3.6 或更高版本
  2. 脚本支持以下命令行参数:
  • -d/--directory:必需,指定要处理的目录路径
  • -p/--prefix:必需,指定要添加的前缀字符串
  • -r/--recursive:可选,递归处理子目录
  • -n/--dry-run:可选,试运行(不实际修改文件)

例如,要为当前目录下的所有文件添加前缀 “backup_”,可以运行:

python add_prefix_to_files.py -d . -p "backup_"

如需先查看操作效果而不实际修改文件,可以添加 --dry-run 参数:

python add_prefix_to_files.py -d . -p "backup_" --dry-run

如果需要递归处理所有子目录中的文件,可以添加 --recursive 参数:

python add_prefix_to_files.py -d . -p "backup_" --recursive