代码功能介绍
这个代码的功能就是一个,给某个文件夹里面添加某个文件(含父级文件夹下的每一个子文件夹)
举个例子,父级文件夹是:“D:\Desktop\1,要添加的文件路径是:D:\1.txt”
则最后会把文件1.txt复制到文件夹D:\Desktop\1里面去。
文末提供源码和打包成品
代码界面截图
下面是现成的源码
import sys
import os
import shutil
import webbrowser
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QWidget, QTextEdit, QMessageBox, QFileDialog)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QPalette, QColorclass FileCopyTool(QMainWindow):def __init__(self):super().__init__()# 定义颜色常量self.BUTTON_BLUE = QColor(33, 150, 243) # 按钮蓝色(#2196F3)self.BUTTON_GREEN = QColor(76, 175, 80) # 按钮绿色(#4CAF50)self.BUTTON_RED = QColor(244, 67, 54) # 按钮红色(#f44336)self.LINE_EDIT_BG = QColor(245, 245, 245) # 文本框背景色(浅灰色)self.folder_list = [] # 存储多个文件夹路径self.initUI()def initUI(self):# 设置窗口标题和大小self.setWindowTitle('文件批量复制工具@阿幸')self.setGeometry(100, 100, 900, 600)self.setMinimumSize(800, 500)# 创建中心部件central_widget = QWidget()self.setCentralWidget(central_widget)# 主布局main_layout = QVBoxLayout(central_widget)main_layout.setContentsMargins(15, 15, 15, 15)main_layout.setSpacing(12)# 批量文件夹区域batch_folder_layout = QHBoxLayout()batch_folder_layout.setSpacing(10)self.batch_folder_label = QLabel('文件夹路径:')self.batch_folder_label.setFont(QFont("Microsoft YaHei", 10))self.batch_folder_label.setFixedWidth(100)self.batch_folder_label.setAlignment(Qt.AlignVCenter | Qt.AlignRight)self.batch_folder_edit = QLineEdit()self.setup_line_edit_bg(self.batch_folder_edit)self.batch_folder_edit.setFont(QFont("Microsoft YaHei", 10))# 设置默认文件夹路径self.default_folder = r"D:\Desktop\文件存储"# 检查默认路径是否存在if os.path.exists(self.default_folder):self.folder_list = [self.default_folder]self.batch_folder_edit.setText(self.default_folder)else:self.batch_folder_edit.setPlaceholderText("已选择 0 个文件夹")self.batch_folder_edit.setReadOnly(True)self.batch_folder_btn = self.create_browse_button("浏览", self.select_batch_folders, self.BUTTON_GREEN)self.clear_batch_btn = self.create_browse_button("清空", self.clear_batch_folders, self.BUTTON_RED)batch_folder_layout.addWidget(self.batch_folder_label)batch_folder_layout.addWidget(self.batch_folder_edit, 1)batch_folder_layout.addWidget(self.batch_folder_btn)batch_folder_layout.addWidget(self.clear_batch_btn)# 源文件路径区域source_file_layout = QHBoxLayout()source_file_layout.setSpacing(10)self.source_file_label = QLabel('文件路径:')self.source_file_label.setFont(QFont("Microsoft YaHei", 10))self.source_file_label.setFixedWidth(100)self.source_file_label.setAlignment(Qt.AlignVCenter | Qt.AlignRight)self.source_file_edit = QLineEdit()self.setup_line_edit_bg(self.source_file_edit)self.source_file_edit.setFont(QFont("Microsoft YaHei", 10))self.source_file_edit.setText(r"D:\1.txt")self.source_file_btn = self.create_browse_button("浏览", self.select_source_file, self.BUTTON_BLUE)source_file_layout.addWidget(self.source_file_label)source_file_layout.addWidget(self.source_file_edit, 1)source_file_layout.addWidget(self.source_file_btn)# 功能按钮区域button_layout = QHBoxLayout()button_layout.setSpacing(20)button_layout.setContentsMargins(0, 5, 0, 5)self.copy_button = QPushButton('开始批量复制')self.copy_button.setFont(QFont("Microsoft YaHei", 12, QFont.Bold))self.copy_button.setFixedSize(150, 40)self.copy_button.clicked.connect(self.start_copy)self.setup_button_style(self.copy_button, self.BUTTON_BLUE)self.advanced_button = QPushButton('高级功能')self.advanced_button.setFont(QFont("Microsoft YaHei", 12, QFont.Bold))self.advanced_button.setFixedSize(120, 40)self.advanced_button.clicked.connect(self.open_advanced)self.setup_button_style(self.advanced_button, self.BUTTON_GREEN)button_layout.addStretch(1)button_layout.addWidget(self.copy_button, alignment=Qt.AlignCenter)button_layout.addWidget(self.advanced_button, alignment=Qt.AlignCenter)button_layout.addStretch(1)# 日志显示区域log_container = QVBoxLayout()log_container.setSpacing(5)self.log_label = QLabel('操作日志:')self.log_label.setFont(QFont("Microsoft YaHei", 10, QFont.Bold))self.log_text = QTextEdit()self.log_text.setReadOnly(True)self.log_text.setFont(QFont("Microsoft YaHei", 10))self.setup_line_edit_bg(self.log_text)log_container.addWidget(self.log_label)log_container.addWidget(self.log_text)# 添加所有组件到主布局main_layout.addLayout(batch_folder_layout)main_layout.addLayout(source_file_layout)main_layout.addLayout(button_layout)main_layout.addLayout(log_container, 1)def create_browse_button(self, text, callback, color):"""创建统一风格的按钮"""button = QPushButton(text)button.setFont(QFont("Microsoft YaHei", 10, QFont.Bold))button.setFixedWidth(80)button.clicked.connect(callback)self.setup_button_style(button, color)return buttondef setup_line_edit_bg(self, widget):"""设置文本框背景颜色"""palette = widget.palette()palette.setColor(QPalette.Base, self.LINE_EDIT_BG)palette.setColor(QPalette.Text, QColor(0, 0, 0))widget.setPalette(palette)widget.setAutoFillBackground(True)def setup_button_style(self, button, base_color):"""设置按钮样式"""button.setStyleSheet(f"""QPushButton {{background-color: rgb({base_color.red()}, {base_color.green()}, {base_color.blue()});color: white;border: none;padding: 5px;border-radius: 4px;}}QPushButton:hover {{background-color: rgb({int(base_color.red()*0.8)}, {int(base_color.green()*0.8)}, {int(base_color.blue()*0.8)});}}QPushButton:pressed {{background-color: rgb({int(base_color.red()*0.7)}, {int(base_color.green()*0.7)}, {int(base_color.blue()*0.7)});}}""")button.setFocusPolicy(Qt.NoFocus)# 文件夹选择功能def select_batch_folders(self):"""选择多个文件夹并显示路径"""folder = QFileDialog.getExistingDirectory(self, "选择文件夹", self.default_folder)if folder:if folder not in self.folder_list:self.folder_list.append(folder)# 显示所有已选择的文件夹路径,用分号分隔self.batch_folder_edit.setText("; ".join(self.folder_list))QMessageBox.information(self, '成功', f'已添加 {len(self.folder_list)} 个文件夹')def clear_batch_folders(self):"""清空已选择的批量文件夹"""self.folder_list.clear()self.batch_folder_edit.clear()self.batch_folder_edit.setPlaceholderText("已选择 0 个文件夹")QMessageBox.information(self, '提示', '已清空所有选择的文件夹')# 文件选择功能def select_source_file(self):file, _ = QFileDialog.getOpenFileName(self, "选择源文件", os.path.dirname(self.source_file_edit.text()))if file:self.source_file_edit.setText(file)def start_copy(self):"""批量复制逻辑"""source_file = self.source_file_edit.text().strip()# 验证源文件if not source_file or not os.path.isfile(source_file):QMessageBox.warning(self, '文件错误', '请输入有效的源文件路径')return# 验证批量文件夹if not self.folder_list:QMessageBox.warning(self, '路径错误', '请选择至少一个文件夹')returnself.log_text.clear()try:# 遍历所有目标文件夹for folder in self.folder_list:# 复制文件到每个目标文件夹的子文件夹中for root, dirs, files in os.walk(folder):for dir in dirs:dest_path = os.path.join(root, dir, os.path.basename(source_file))try:shutil.copy2(source_file, dest_path)self.log_text.append(f"已复制到:{dest_path}")except Exception as e:self.log_text.append(f"复制失败到 {dest_path}: {e}")QMessageBox.information(self, '完成', '批量复制操作已完成')except Exception as e:QMessageBox.critical(self, '错误', f'操作过程中发生错误: {str(e)}')def open_advanced(self):webbrowser.open("你自己的")if __name__ == '__main__':app = QApplication(sys.argv)app.setStyle("Fusion")window = FileCopyTool()window.show()sys.exit(app.exec_())
源码打包
1、你需要安装Python(不会安装的自行解决)
2、下载我提供的源码文件
3、将源码文件放在Python路径下
4、打开cmd界面,输入:“D:\Program Files (x86)\biancheng\python3113\python.exe” -m PyInstaller --onefile --windowed “D:\Program Files (x86)\biancheng\python3113\批量给文件夹添加文件v2.py”
其中D:\Program Files (x86)\biancheng\python3113要替换为你自己的Python路径
成品下载
如果你不会打包,就直接用我写的吧。
夸克