如何编写桌面整理脚本

wen 实用脚本 3

本文目录导读:

如何编写桌面整理脚本

  1. Python 桌面整理脚本(最常用)
  2. PowerShell 桌面整理脚本(Windows)
  3. Bash 脚本(Linux/Mac)
  4. 使用方法
  5. 高级功能建议

我来为您介绍几种桌面整理脚本的编写方法,从简单到进阶,您可以根据需求选择:

Python 桌面整理脚本(最常用)

基础版本:按文件类型分类

import os
import shutil
from pathlib import Path
def organize_desktop():
    # 获取桌面路径
    desktop = Path.home() / 'Desktop'
    # 定义文件分类规则
    categories = {
        '图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'],
        '文档': ['.doc', '.docx', '.txt', '.pdf', '.xls', '.xlsx', '.ppt', '.pptx'],
        '视频': ['.mp4', '.avi', '.mkv', '.mov', '.wmv'],
        '音乐': ['.mp3', '.wav', '.flac', '.aac'],
        '压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
        '程序': ['.exe', '.msi', '.app', '.sh'],
        '代码': ['.py', '.js', '.java', '.html', '.css', '.cpp']
    }
    # 创建分类文件夹并移动文件
    for file in desktop.iterdir():
        if file.is_file():  # 只处理文件,不处理文件夹
            moved = False
            for category, extensions in categories.items():
                if file.suffix.lower() in extensions:
                    dest_dir = desktop / category
                    dest_dir.mkdir(exist_ok=True)
                    shutil.move(str(file), str(dest_dir / file.name))
                    print(f"移动 {file.name} -> {category}/")
                    moved = True
                    break
            # 未分类的文件放入"其他"文件夹
            if not moved:
                other_dir = desktop / '其他'
                other_dir.mkdir(exist_ok=True)
                shutil.move(str(file), str(other_dir / file.name))
                print(f"移动 {file.name} -> 其他/")
if __name__ == "__main__":
    organize_desktop()
    print("桌面整理完成!")

进阶版本:带GUI界面和高级功能

import tkinter as tk
from tkinter import filedialog, messagebox
import os
import shutil
from datetime import datetime
import threading
class DesktopOrganizer:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("桌面整理工具")
        self.root.geometry("500x400")
        self.setup_ui()
    def setup_ui(self):
        # 标题
        title = tk.Label(self.root, text="桌面整理助手", font=("Arial", 16))
        title.pack(pady=20)
        # 说明文字
        info = tk.Label(self.root, text="选择整理方式:", font=("Arial", 12))
        info.pack(pady=10)
        # 整理选项
        self.organize_type = tk.StringVar(value="type")
        type_option = tk.Radiobutton(self.root, text="按文件类型整理", 
                                    variable=self.organize_type, value="type")
        type_option.pack()
        date_option = tk.Radiobutton(self.root, text="按日期整理", 
                                    variable=self.organize_type, value="date")
        date_option.pack()
        # 整理按钮
        btn = tk.Button(self.root, text="开始整理", command=self.start_organize,
                       bg="#4CAF50", fg="white", font=("Arial", 12))
        btn.pack(pady=20)
        # 状态标签
        self.status = tk.Label(self.root, text="就绪", font=("Arial", 10))
        self.status.pack()
    def start_organize(self):
        # 在新线程中执行整理,避免界面卡顿
        threading.Thread(target=self.organize, daemon=True).start()
    def organize(self):
        desktop = os.path.expanduser("~/Desktop")
        # 更新状态
        self.root.after(0, lambda: self.status.config(text="正在整理..."))
        # 获取所有文件
        files = [f for f in os.listdir(desktop) 
                if os.path.isfile(os.path.join(desktop, f))]
        for file in files:
            file_path = os.path.join(desktop, file)
            try:
                if self.organize_type.get() == "type":
                    self.organize_by_type(file_path, desktop)
                else:
                    self.organize_by_date(file_path, desktop)
            except Exception as e:
                print(f"处理文件 {file} 时出错: {e}")
        self.root.after(0, lambda: self.status.config(text="整理完成!"))
        messagebox.showinfo("完成", "桌面整理完成!")
    def organize_by_type(self, file_path, desktop):
        # 获取文件扩展名
        extension = os.path.splitext(file_path)[1]
        if not extension:
            return
        # 创建文件夹并移动
        folder_name = extension[1:].upper() + "文件"  #  PDF文件
        dest_folder = os.path.join(desktop, folder_name)
        os.makedirs(dest_folder, exist_ok=True)
        shutil.move(file_path, os.path.join(dest_folder, os.path.basename(file_path)))
    def organize_by_date(self, file_path, desktop):
        # 获取文件修改时间
        timestamp = os.path.getmtime(file_path)
        date = datetime.fromtimestamp(timestamp)
        # 按月创建文件夹
        folder_name = date.strftime("%Y年%m月")
        dest_folder = os.path.join(desktop, folder_name)
        os.makedirs(dest_folder, exist_ok=True)
        shutil.move(file_path, os.path.join(dest_folder, os.path.basename(file_path)))
    def run(self):
        self.root.mainloop()
if __name__ == "__main__":
    app = DesktopOrganizer()
    app.run()

PowerShell 桌面整理脚本(Windows)

# organize-desktop.ps1
param(
    [string]$DesktopPath = "$env:USERPROFILE\Desktop"
)
function Organize-Desktop {
    Write-Host "开始整理桌面..." -ForegroundColor Green
    # 定义文件分类
    $categories = @{
        'Images' = @('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg')
        'Documents' = @('.doc', '.docx', '.txt', '.pdf', '.xls', '.xlsx', '.ppt', '.pptx')
        'Videos' = @('.mp4', '.avi', '.mkv', '.mov')
        'Audio' = @('.mp3', '.wav', '.flac')
        'Archives' = @('.zip', '.rar', '.7z', '.tar', '.gz')
        'Programs' = @('.exe', '.msi', '.bat')
        'Code' = @('.py', '.js', '.html', '.css', '.cpp', '.java')
    }
    # 遍历桌面文件
    Get-ChildItem -Path $DesktopPath -File | ForEach-Object {
        $file = $_
        $moved = $false
        foreach ($category in $categories.Keys) {
            if ($file.Extension.ToLower() -in $categories[$category]) {
                $destDir = Join-Path $DesktopPath $category
                if (!(Test-Path $destDir)) {
                    New-Item -ItemType Directory -Path $destDir | Out-Null
                }
                Move-Item $file.FullName -Destination $destDir
                Write-Host "移动: $($file.Name) -> $category/" -ForegroundColor Yellow
                $moved = $true
                break
            }
        }
        # 未分类文件
        if (!$moved) {
            $otherDir = Join-Path $DesktopPath "其他"
            if (!(Test-Path $otherDir)) {
                New-Item -ItemType Directory -Path $otherDir | Out-Null
            }
            Move-Item $file.FullName -Destination $otherDir
            Write-Host "移动: $($file.Name) -> 其他/" -ForegroundColor Yellow
        }
    }
    Write-Host "桌面整理完成!" -ForegroundColor Green
}
# 运行整理
Organize-Desktop

Bash 脚本(Linux/Mac)

#!/bin/bash
# organize-desktop.sh
# 设置桌面路径
DESKTOP="$HOME/Desktop"
# 创建分类函数
organize_folder() {
    local ext="$1"
    local folder="$2"
    if [ -d "$DESKTOP" ]; then
        # 创建文件夹(如果不存在)
        mkdir -p "$DESKTOP/$folder"
        # 查找并移动匹配文件
        find "$DESKTOP" -maxdepth 1 -type f \( -name "*.$ext" \) -exec mv {} "$DESKTOP/$folder/" \;
    fi
}
echo "开始整理桌面..."
# 分类整理
organize_folder "jpg" "图片"
organize_folder "jpeg" "图片"
organize_folder "png" "图片"
organize_folder "gif" "图片"
organize_folder "pdf" "文档"
organize_folder "doc" "文档"
organize_folder "docx" "文档"
organize_folder "txt" "文档"
organize_folder "mp4" "视频"
organize_folder "avi" "视频"
organize_folder "mkv" "视频"
organize_folder "mp3" "音乐"
organize_folder "wav" "音乐"
organize_folder "zip" "压缩包"
organize_folder "rar" "压缩包"
# 移动其他未分类的 .py 文件和代码文件
organize_folder "py" "代码"
organize_folder "js" "代码"
organize_folder "html" "代码"
# 处理其他文件
mkdir -p "$DESKTOP/其他"
find "$DESKTOP" -maxdepth 1 -type f ! -name ".*" | while read file; do
    folder=$(basename "$file")
    mv "$file" "$DESKTOP/其他/"
done
echo "桌面整理完成!"

使用方法

Windows PowerShell:

# 执行脚本
powershell -ExecutionPolicy Bypass -File organize-desktop.ps1

Linux/Mac:

# 给脚本执行权限
chmod +x organize-desktop.sh
# 运行脚本
./organize-desktop.sh

Python:

# 安装所需依赖
pip install tkinter  # 如果需要GUI
# 运行脚本
python organize_desktop.py

高级功能建议

如果您需要更多功能,可以考虑添加:

  • 自动运行(通过任务计划程序或cron)
  • 文件去重(检查重复文件)
  • 预览功能(整理前预览移动操作)
  • 撤销功能(记录操作日志)
  • 自定义规则(允许用户配置分类规则)

您可以根据实际需求选择或修改这些脚本,如果需要特定功能的实现,请告诉我具体需求。

抱歉,评论功能暂时关闭!