批量文件扩展名更改工具开发指南

本文将创建一个通用的批量文件扩展名更改工具,并提供将其打包成可执行文件的指南。

通用工具代码

python 复制代码
import os
import argparse
import sys
from pathlib import Path

def batch_rename_extensions(directory, old_ext=None, new_ext=None, recursive=False, dry_run=False):
    """
    批量更改文件扩展名
    
    Args:
        directory (str): 要处理的目录路径
        old_ext (str): 原扩展名(不带点),如果为None则处理所有非指定扩展名的文件
        new_ext (str): 新扩展名(不带点)
        recursive (bool): 是否递归处理子目录
        dry_run (bool): 试运行模式,只显示将要更改的文件而不实际执行
    """
    if not os.path.exists(directory):
        print(f"错误:目录 '{directory}' 不存在")
        return False
        
    if not new_ext:
        print("错误:必须指定新扩展名")
        return False
        
    # 确保扩展名格式正确(不带点)
    if old_ext and old_ext.startswith('.'):
        old_ext = old_ext[1:]
    if new_ext.startswith('.'):
        new_ext = new_ext[1:]
    
    changed_count = 0
    skipped_count = 0
    
    # 遍历目录
    for root, dirs, files in os.walk(directory):
        for file in files:
            file_path = os.path.join(root, file)
            
            # 如果不是递归模式且不在当前目录,则跳过
            if not recursive and root != directory:
                continue
                
            # 获取文件扩展名
            _, ext = os.path.splitext(file)
            if ext.startswith('.'):
                ext = ext[1:]
            
            # 检查是否符合更改条件
            if old_ext is None or ext == old_ext:
                # 构建新文件名
                new_file_name = os.path.splitext(file)[0] + '.' + new_ext
                new_file_path = os.path.join(root, new_file_name)
                
                # 如果新旧路径相同,跳过
                if file_path == new_file_path:
                    skipped_count += 1
                    continue
                
                # 检查新文件名是否已存在
                if os.path.exists(new_file_path):
                    print(f"警告:文件 '{new_file_path}' 已存在,跳过 '{file_path}'")
                    skipped_count += 1
                    continue
                
                # 执行重命名或显示预览
                if dry_run:
                    print(f"[预览] '{file_path}' -> '{new_file_path}'")
                else:
                    try:
                        os.rename(file_path, new_file_path)
                        print(f"已重命名: '{file_path}' -> '{new_file_path}'")
                    except Exception as e:
                        print(f"错误:无法重命名 '{file_path}': {str(e)}")
                        skipped_count += 1
                        continue
                
                changed_count += 1
        
        # 如果不是递归模式,只处理当前目录后退出循环
        if not recursive:
            break
    
    print(f"\n操作完成: 成功更改 {changed_count} 个文件,跳过 {skipped_count} 个文件")
    return True

def main():
    parser = argparse.ArgumentParser(
        description="批量文件扩展名更改工具",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  %(prog)s -d /path/to/files -n jpg              # 将所有文件更改为.jpg扩展名
  %(prog)s -d /path/to/files -o png -n jpg       # 将.png文件更改为.jpg
  %(prog)s -d /path/to/files -n jpg -r           # 递归处理子目录
  %(prog)s -d /path/to/files -n jpg --dry-run    # 试运行,只显示预览
        """
    )
    
    parser.add_argument('-d', '--directory', required=True, help='要处理的目录路径')
    parser.add_argument('-o', '--old-ext', help='原扩展名(不带点),如果省略则处理所有文件')
    parser.add_argument('-n', '--new-ext', required=True, help='新扩展名(不带点)')
    parser.add_argument('-r', '--recursive', action='store_true', help='递归处理子目录')
    parser.add_argument('--dry-run', action='store_true', help='试运行模式,只显示预览而不实际更改')
    
    args = parser.parse_args()
    
    print("批量文件扩展名更改工具 v1.0")
    print("=" * 50)
    
    if args.dry_run:
        print("注意:处于试运行模式,不会实际更改文件")
    
    batch_rename_extensions(
        directory=args.directory,
        old_ext=args.old_ext,
        new_ext=args.new_ext,
        recursive=args.recursive,
        dry_run=args.dry_run
    )

if __name__ == '__main__':
    main()

如何打包成EXE文件

方法一:使用PyInstaller(推荐)

  1. 安装PyInstaller

    复制代码
    pip install pyinstaller
  2. 打包程序

    css 复制代码
    pyinstaller --onefile --console --name "批量文件扩展名更改工具" file_renamer.py

    参数说明:

    • --onefile:打包成单个exe文件
    • --console:显示控制台窗口
    • --name:指定输出exe的名称

需要注意的是如果 pyinstaller 可执行文件所在的路径不在你的环境变量中,那么你就需要要么将其添加到环境变量,要么在执行上述命令时添加上它的路径。

bash 复制代码
pip show pyinstaller

可以帮你定位到你的 pyinstaller 安装到了哪里。

  1. 找到生成的exe文件 : 打包完成后,exe文件将位于项目目录下的dist文件夹中。

方法二:使用auto-py-to-exe(图形界面工具)

  1. 安装auto-py-to-exe

    vbnet 复制代码
    pip install auto-py-to-exe
  2. 运行工具

    vbnet 复制代码
    auto-py-to-exe
  3. 在图形界面中配置

    • 选择Python脚本文件
    • 选择"One Directory"或"One File"模式
    • 配置其他选项(图标、名称等)
    • 点击"CONVERT .PY TO .EXE"按钮

销售准备建议

  1. 创建使用说明文档

    • 编写详细的README文件,说明工具的功能和使用方法
    • 提供常见问题解答
  2. 添加许可证信息

    • 创建简单的许可证文件,说明使用条款和限制
  3. 制作简单界面(可选)

    • 如果您想让工具更易用,可以考虑添加一个简单的图形界面
  4. 测试工具

    • 在不同Windows版本上测试exe文件
    • 确保没有误报病毒(有时打包的Python程序会被误报)
  5. 定价策略

    • 在闲鱼上,这类小工具通常定价在5-20元之间
    • 可以提供免费试用版(功能受限)和付费完整版

使用示例

用户可以通过命令行使用您的工具:

复制代码
批量文件扩展名更改工具.exe -d C:\Users\Username\Pictures -o png -n jpg -r

这将递归地将C:\Users\Username\Pictures目录及其子目录中的所有.png文件更改为.jpg扩展名。

希望这些信息对您有帮助!如果您有任何问题,请随时提问。

相关推荐
半路程序员1 分钟前
Go内存泄漏排查pprof和trace使用
开发语言·后端·golang
WongLeer2 分钟前
Go + GORM 多级分类实现方案对比:内存建树、循环查询与 Preload
开发语言·后端·mysql·golang·gorm
Victor3569 分钟前
Hibernate(34)Hibernate的别名(Alias)是什么?
后端
superman超哥12 分钟前
Rust HashMap的哈希算法与冲突解决:高性能关联容器的内部机制
开发语言·后端·rust·哈希算法·编程语言·冲突解决·rust hashmap
Victor35615 分钟前
Hibernate(33) Hibernate的投影(Projections)是什么?
后端
a程序小傲16 分钟前
【Node】单线程的Node.js为什么可以实现多线程?
java·数据库·后端·面试·node.js
奋进的芋圆9 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
计算机程序设计小李同学10 小时前
个人数据管理系统
java·vue.js·spring boot·后端·web安全
Echo娴10 小时前
Spring的开发步骤
java·后端·spring
追逐时光者10 小时前
TIOBE 公布 C# 是 2025 年度编程语言
后端·.net