代碼功能介紹
這個代碼的功能就是一個,給某個文件夾里面添加某個文件(含父級文件夾下的每一個子文件夾)
舉個例子,父級文件夾是:“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路徑
成品下載
如果你不會打包,就直接用我寫的吧。
夸克