以下是一个使用 PyQt5 实现的批量改文件名的工具示例。这个工具具有输入目录、输出目录和输出文件名规则的文本框。假设规则文本框的内容是 file*
,那么输出文件名将按照 file1
、file2
等格式生成。
首先,确保你已经安装了 PyQt5:
pip install PyQt5
然后,创建一个新的 Python 脚本文件(例如 rename_tool.py
),并将以下代码粘贴到其中:
import sys
import os
import shutil
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QFileDialog, QMessageBox
class RenameTool(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('批量改文件名工具')
self.inputDirLabel = QLabel('输入目录:')
self.inputDirEdit = QLineEdit()
self.inputDirButton = QPushButton('浏览')
self.inputDirButton.clicked.connect(self.browseInputDir)
self.outputDirLabel = QLabel('输出目录:')
self.outputDirEdit = QLineEdit()
self.outputDirButton = QPushButton('浏览')
self.outputDirButton.clicked.connect(self.browseOutputDir)
self.renameRuleLabel = QLabel('输出文件名规则:')
self.renameRuleEdit = QLineEdit()
self.renameButton = QPushButton('开始改名')
self.renameButton.clicked.connect(self.renameFiles)
layout = QVBoxLayout()
layout.addWidget(self.inputDirLabel)
layout.addWidget(self.inputDirEdit)
layout.addWidget(self.inputDirButton)
layout.addWidget(self.outputDirLabel)
layout.addWidget(self.outputDirEdit)
layout.addWidget(self.outputDirButton)
layout.addWidget(self.renameRuleLabel)
layout.addWidget(self.renameRuleEdit)
layout.addWidget(self.renameButton)
self.setLayout(layout)
def browseInputDir(self):
dir_ = QFileDialog.getExistingDirectory(self, '选择输入目录')
if dir_:
self.inputDirEdit.setText(dir_)
def browseOutputDir(self):
dir_ = QFileDialog.getExistingDirectory(self, '选择输出目录')
if dir_:
self.outputDirEdit.setText(dir_)
def renameFiles(self):
input_dir = self.inputDirEdit.text()
output_dir = self.outputDirEdit.text()
rename_rule = self.renameRuleEdit.text()
if not input_dir or not output_dir or not rename_rule:
QMessageBox.warning(self, '警告', '请输入所有字段')
return
if not os.path.exists(output_dir):
os.makedirs(output_dir)
files = [f for f in os.listdir(input_dir) if os.path.isfile(os.path.join(input_dir, f))]
num_digits = len(str(len(files)))
for i, filename in enumerate(files):
new_name = rename_rule.replace('*', str(i + 1).zfill(num_digits))
src_path = os.path.join(input_dir, filename)
dst_path = os.path.join(output_dir, filename)
shutil.copy2(src_path, dst_path) # 先拷贝文件到输出目录
new_dst_path = os.path.join(output_dir, new_name)
os.rename(dst_path, new_dst_path) # 在输出目录中重命名文件
QMessageBox.information(self, '完成', '文件名修改完成')
if __name__ == '__main__':
app = QApplication(sys.argv)
tool = RenameTool()
tool.show()
sys.exit(app.exec_())
该脚本创建一个简单的 PyQt5 界面,包括以下组件:
- 输入目录选择按钮和文本框
- 输出目录选择按钮和文本框
- 输出文件名规则文本框
- 开始改名按钮
renameFiles
方法根据指定的文件名规则批量修改文件名,并将它们保存到输出目录中。如果文件名规则中的 *
代表数字,则输出文件名将按照 file1
、file2
等格式生成。