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

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

通用工具代码

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扩展名。

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

相关推荐
修一呀14 分钟前
[后端快速搭建]基于 Django+DeepSeek API 快速搭建智能问答后端
后端·python·django
哈基米喜欢哈哈哈18 分钟前
Spring Boot 3.5 新特性
java·spring boot·后端
当无27 分钟前
Mac 使用Docker部署Mysql镜像,并使用DBever客户端连接
后端
野生的午谦27 分钟前
PostgreSQL 部署全记录:Ubuntu从安装到故障排查的完整实践
后端
David爱编程1 小时前
可见性问题的真实案例:为什么线程看不到最新的值?
java·后端
00后程序员1 小时前
移动端网页调试实战,iOS WebKit Debug Proxy 的应用与替代方案
后端
whitepure1 小时前
我如何理解与追求整洁代码
java·后端·代码规范
用户8356290780511 小时前
Java高效读取Excel表格数据教程
java·后端
yinke小琪2 小时前
今天解析一下从代码到架构:Java后端开发的"破局"与"新生"
java·后端·架构
码出极致2 小时前
支付平台资金强一致实践:基于 Seata TCC+DB 模式的余额扣减与渠道支付落地案例
后端·面试