本文将创建一个通用的批量文件扩展名更改工具,并提供将其打包成可执行文件的指南。
通用工具代码
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(推荐)
-
安装PyInstaller:
pip install pyinstaller
-
打包程序:
csspyinstaller --onefile --console --name "批量文件扩展名更改工具" file_renamer.py
参数说明:
--onefile
:打包成单个exe文件--console
:显示控制台窗口--name
:指定输出exe的名称
需要注意的是如果 pyinstaller 可执行文件所在的路径不在你的环境变量中,那么你就需要要么将其添加到环境变量,要么在执行上述命令时添加上它的路径。
bash
pip show pyinstaller
可以帮你定位到你的 pyinstaller 安装到了哪里。
- 找到生成的exe文件 : 打包完成后,exe文件将位于项目目录下的
dist
文件夹中。
方法二:使用auto-py-to-exe(图形界面工具)
-
安装auto-py-to-exe:
vbnetpip install auto-py-to-exe
-
运行工具:
vbnetauto-py-to-exe
-
在图形界面中配置:
- 选择Python脚本文件
- 选择"One Directory"或"One File"模式
- 配置其他选项(图标、名称等)
- 点击"CONVERT .PY TO .EXE"按钮
销售准备建议
-
创建使用说明文档:
- 编写详细的README文件,说明工具的功能和使用方法
- 提供常见问题解答
-
添加许可证信息:
- 创建简单的许可证文件,说明使用条款和限制
-
制作简单界面(可选):
- 如果您想让工具更易用,可以考虑添加一个简单的图形界面
-
测试工具:
- 在不同Windows版本上测试exe文件
- 确保没有误报病毒(有时打包的Python程序会被误报)
-
定价策略:
- 在闲鱼上,这类小工具通常定价在5-20元之间
- 可以提供免费试用版(功能受限)和付费完整版
使用示例
用户可以通过命令行使用您的工具:
批量文件扩展名更改工具.exe -d C:\Users\Username\Pictures -o png -n jpg -r
这将递归地将C:\Users\Username\Pictures
目录及其子目录中的所有.png文件更改为.jpg扩展名。
希望这些信息对您有帮助!如果您有任何问题,请随时提问。