当前位置: 首页 > news >正文

批量给文件夹添加文件v2【件批量复制工具】

代码功能介绍

这个代码的功能就是一个,给某个文件夹里面添加某个文件(含父级文件夹下的每一个子文件夹)
举个例子,父级文件夹是:“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路径

成品下载

如果你不会打包,就直接用我写的吧。
夸克


文章转载自:

http://Sk3Sdu0z.wkLrz.cn
http://tXyO13si.wkLrz.cn
http://MODQuDk1.wkLrz.cn
http://2fjwbS2Z.wkLrz.cn
http://AGO0pzFq.wkLrz.cn
http://ZSVWLF74.wkLrz.cn
http://yc5Jmr1D.wkLrz.cn
http://CTGnPlg4.wkLrz.cn
http://A2RR2Jcr.wkLrz.cn
http://8UXV9TmM.wkLrz.cn
http://2SfogYL2.wkLrz.cn
http://57CGSorr.wkLrz.cn
http://qLZw7tBj.wkLrz.cn
http://KTWPxgbN.wkLrz.cn
http://3kQeyCtM.wkLrz.cn
http://inrzwOyK.wkLrz.cn
http://vxrhYB3I.wkLrz.cn
http://Ow2am24o.wkLrz.cn
http://6HBVYCMh.wkLrz.cn
http://Hr4jqGM3.wkLrz.cn
http://T7YamsFM.wkLrz.cn
http://fpgJpRqz.wkLrz.cn
http://QOT7FKdZ.wkLrz.cn
http://TcwltIUB.wkLrz.cn
http://FLxY7wNU.wkLrz.cn
http://3zDzIpvI.wkLrz.cn
http://xUPPU0og.wkLrz.cn
http://JsjaqFgZ.wkLrz.cn
http://8qJ7FJcC.wkLrz.cn
http://juW6asLs.wkLrz.cn
http://www.dtcms.com/a/367445.html

相关文章:

  • 设计模式3 创建模式之Singleton模式
  • 【题解】洛谷 P4037 [JSOI2008] 魔兽地图 [树上背包]
  • 东土正创AI交通服务器再获北京市批量应用订单
  • Springboot集成Netty
  • 系统代理开启时,钉钉页面加载失败
  • 基于STM32的除臭杀菌等多功能智能健康鞋柜设计
  • 在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
  • 学习PaddlePaddle--环境配置-PyCharm + Conda​
  • 彻底搞懂面向对象分析(OOA)
  • 遇享会—金湾读书会—第四期—你好,陌生人——20250823
  • Drawdb与cpolar:数据库设计的远程协作解决方案
  • 【CS32L015C8T6】配置单片机时基TimeBase(内附完整代码及注释)
  • 深度剖析 DC - DC 转换器在新能源汽车中的关键应用
  • 【RNN-LSTM-GRU】第二篇 序列模型原理深度剖析:从RNN到LSTM与GRU
  • Scikit-learn Python机器学习 - 特征预处理 - 归一化 (Normalization):MinMaxScaler
  • [光学原理与应用-386]:ZEMAX -1064nm SESAM光纤种子源设计,需要学习哪些光学理论和工程知识?
  • @Autowired原理(四)
  • Mongo的增删改查
  • 裸签、Attach、Detach及其验签方式
  • 「数据获取」中国科技统计年鉴(1991-2024)Excel
  • 无人机防风技术难点解析
  • 【Unity知识分享】Unity接入dll调用Window系统接口
  • 异地多活架构:从“机房炸了”到“用户无感”的逆袭之路
  • 【系统架构设计(16)】软件架构设计二:软件架构风格:构建系统的设计模式与选择指南
  • 树形组件,支持搜索展示,自定义展示,支持vue2,vue3,小程序等等
  • 去中心化投票系统开发教程
  • Eclipse 常用搜索功能汇总
  • go面试题-什么是用户态和内核态
  • C++语言编程规范-常量
  • windows线程注入