本文目录导读:

我来帮你创建一个自动分类整理下载文件的脚本,这个脚本会根据文件类型自动整理到对应的文件夹中。
Python 版本(推荐)
#!/usr/bin/env python3
"""
自动整理下载文件夹脚本
根据文件类型自动分类到对应文件夹
"""
import os
import shutil
import time
from pathlib import Path
import logging
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logger = logging.getLogger(__name__)
# 文件分类规则
FILE_CATEGORIES = {
# 图片文件
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.webp', '.ico', '.tiff'],
# 文档文件
'文档': ['.doc', '.docx', '.txt', '.pdf', '.xls', '.xlsx', '.ppt', '.pptx',
'.md', '.rtf', '.odt', '.pages'],
# 压缩包
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz', '.bz2', '.xz'],
# 视频文件
'视频': ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.webm', '.m4v'],
# 音频文件
'音频': ['.mp3', '.wav', '.flac', '.aac', '.ogg', '.m4a', '.wma'],
# 可执行文件
'程序': ['.exe', '.msi', '.dmg', '.pkg', '.deb', '.rpm', '.sh', '.bat', '.app'],
# 开发文件
'开发文件': ['.py', '.js', '.html', '.css', '.java', '.cpp', '.c', '.h',
'.json', '.xml', '.yaml', '.yml', '.sql', '.php', '.rb', '.go'],
# 字体文件
'字体': ['.ttf', '.otf', '.woff', '.woff2', '.eot'],
# 其他
'其他': []
}
class FileOrganizer:
def __init__(self, download_dir=None):
"""初始化整理器"""
if download_dir is None:
# 默认使用系统下载文件夹
download_dir = str(Path.home() / 'Downloads')
self.download_dir = Path(download_dir)
if not self.download_dir.exists():
raise ValueError(f"文件夹不存在: {download_dir}")
def get_category(self, file_ext):
"""根据文件扩展名获取分类"""
file_ext = file_ext.lower()
for category, extensions in FILE_CATEGORIES.items():
if file_ext in extensions:
return category
return '其他'
def create_category_folder(self, category):
"""创建分类文件夹"""
folder = self.download_dir / category
if not folder.exists():
folder.mkdir(parents=True, exist_ok=True)
logger.info(f"创建文件夹: {folder}")
return folder
def organize_file(self, file_path):
"""整理单个文件"""
try:
file_path = Path(file_path)
if file_path.is_dir(): # 跳过文件夹
return None
file_ext = file_path.suffix
category = self.get_category(file_ext)
target_folder = self.create_category_folder(category)
# 处理重名文件
target_path = target_folder / file_path.name
if target_path.exists():
name, ext = os.path.splitext(file_path.name)
counter = 1
while target_path.exists():
target_path = target_folder / f"{name}_{counter}{ext}"
counter += 1
# 移动文件
shutil.move(str(file_path), str(target_path))
logger.info(f"移动: {file_path.name} → {category}/{target_path.name}")
return target_path
except Exception as e:
logger.error(f"处理文件时出错 {file_path}: {e}")
return None
def organize_all_files(self, dry_run=False):
"""整理所有文件"""
files = [f for f in self.download_dir.iterdir() if f.is_file()]
if not files:
logger.info("没有需要整理的文件")
return
logger.info(f"找到 {len(files)} 个文件需要整理")
if dry_run:
logger.info("*** 预演模式(不实际移动文件)***")
for file_path in files:
category = self.get_category(file_path.suffix)
logger.info(f"将移动: {file_path.name} → {category}/")
else:
moved_count = 0
for file_path in files:
if self.organize_file(file_path):
moved_count += 1
logger.info(f"整理完成,共移动 {moved_count} 个文件")
def organize_old_files(self, days=30, dry_run=False):
"""整理N天前的文件(清理旧文件)"""
cutoff_time = time.time() - (days * 24 * 3600)
files = []
for f in self.download_dir.iterdir():
if f.is_file() and f.stat().st_mtime < cutoff_time:
files.append(f)
if not files:
logger.info(f"没有找到超过 {days} 天的文件")
return
logger.info(f"找到 {len(files)} 个超过 {days} 天的文件")
self.organize_selected_files(files, dry_run)
def organize_selected_files(self, files, dry_run=False):
"""整理选定的文件列表"""
if dry_run:
for file_path in files:
category = self.get_category(file_path.suffix)
logger.info(f"将移动: {file_path.name} → {category}/")
else:
moved_count = 0
for file_path in files:
if self.organize_file(file_path):
moved_count += 1
logger.info(f"整理完成,共移动 {moved_count} 个文件")
def main():
# 命令行参数解析
import argparse
parser = argparse.ArgumentParser(description='自动整理下载文件夹')
parser.add_argument('--path', '-p',
help='要整理的文件夹路径(默认为系统下载文件夹)')
parser.add_argument('--dry-run', '-d',
action='store_true',
help='预演模式,只显示将执行的操作,不实际移动文件')
parser.add_argument('--time', '-t',
type=int, metavar='DAYS',
help='只整理N天前的文件')
parser.add_argument('--auto', '-a',
action='store_true',
help='自动模式,无需确认直接执行')
args = parser.parse_args()
try:
# 创建整理器
organizer = FileOrganizer(args.path)
logger.info(f"开始整理文件夹: {organizer.download_dir}")
# 根据参数执行不同的整理方式
if args.time:
# 整理指定天数前的文件
organizer.organize_old_files(days=args.time, dry_run=args.dry_run)
else:
# 整理所有文件
if not args.dry_run and not args.auto:
response = input("确定要整理所有文件吗?(y/n): ")
if response.lower() != 'y':
logger.info("操作已取消")
return
organizer.organize_all_files(dry_run=args.dry_run)
except ValueError as e:
logger.error(f"错误: {e}")
except KeyboardInterrupt:
logger.info("\n操作已中断")
except Exception as e:
logger.error(f"发生未预期的错误: {e}")
if __name__ == '__main__':
main()
使用方法
保存脚本
将上述代码保存为 organize_downloads.py
基本使用
# 整理下载文件夹(默认) python organize_downloads.py # 整理指定文件夹 python organize_downloads.py --path /path/to/folder # 预演模式(只显示将要移动的文件,不实际移动) python organize_downloads.py --dry-run # 整理30天前的文件 python organize_downloads.py --time 30 # 自动模式(跳过确认提示) python organize_downloads.py --auto
批量文件整理脚本(Windows Batch)
@echo off下载文件夹整理工具
chcp 65001 >nul
color 0A
echo.
echo ========================================
echo 下载文件夹整理工具
echo ========================================
echo.
set "downloads=%USERPROFILE%\Downloads"
if not exist "%downloads%" (
echo 下载文件夹不存在!
pause
exit /b
)
cd /d "%downloads%"
echo 开始整理下载文件夹...
echo.
rem 创建分类文件夹
for %%d in (图片 文档 视频 音频 程序 压缩包 其他) do (
if not exist "%%d" mkdir "%%d"
)
rem 整理图片
for %%i in (*.jpg *.jpeg *.png *.gif *.bmp *.svg *.webp *.ico) do (
if exist "%%i" move "%%i" "图片\" 2>nul && echo 移动图片: %%i
)
rem 整理文档
for %%i in (*.doc *.docx *.txt *.pdf *.xls *.xlsx *.ppt *.pptx *.md) do (
if exist "%%i" move "%%i" "文档\" 2>nul && echo 移动文档: %%i
)
rem 整理视频
for %%i in (*.mp4 *.avi *.mkv *.mov *.wmv *.flv *.webm) do (
if exist "%%i" move "%%i" "视频\" 2>nul && echo 移动视频: %%i
)
rem 整理音频
for %%i in (*.mp3 *.wav *.flac *.aac *.ogg *.m4a) do (
if exist "%%i" move "%%i" "音频\" 2>nul && echo 移动音频: %%i
)
rem 整理程序
for %%i in (*.exe *.msi *.dmg *.pkg *.bat) do (
if exist "%%i" move "%%i" "程序\" 2>nul && echo 移动程序: %%i
)
rem 整理压缩包
for %%i in (*.zip *.rar *.7z *.tar *.gz *.bz2) do (
if exist "%%i" move "%%i" "压缩包\" 2>nul && echo 移动压缩包: %%i
)
echo.
echo 整理完成!
echo.
pause
使用技巧
添加自定义分类
在Python脚本中,你可以轻松添加新的文件类型:
# 添加新的分类
FILE_CATEGORIES = {
# ... 现有分类
# 新增加课程文件
'课程资料': ['.ppt', '.pptx', '.doc', '.docx', '.pdf'],
# 添加设计文件
'设计文件': ['.psd', '.ai', '.xd', '.fig', '.sketch'],
}
设置定时自动整理(Windows)
使用任务计划程序设置定期运行:
- 打开"任务计划程序"
- 创建基本任务
- 设置触发器和操作(运行Python脚本)
设置定时自动整理(Mac/Linux)
使用crontab:
# 每天凌晨2点运行整理脚本 0 2 * * * python3 /path/to/organize_downloads.py --auto
注意事项
- 备份文件:首次运行前建议先备份重要文件
- 测试运行:建议先用
--dry-run模式预览操作 - 自定义规则:可以根据需要修改分类规则
- 路径选择:确保有足够的磁盘空间
这个脚本提供了完整的分类整理功能,你可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播