本文目录导读:

我来帮你编写一个文件分类移动脚本,这里提供一个Python版本的通用文件分类器:
基础版本:按文件扩展名分类
import os
import shutil
from pathlib import Path
def classify_files_by_extension(source_dir, target_dir=None, move=True):
"""
按文件扩展名自动分类文件
:param source_dir: 源文件夹路径
:param target_dir: 目标文件夹路径(默认与源文件夹相同)
:param move: True=移动文件, False=复制文件
"""
# 设置目标目录
if target_dir is None:
target_dir = source_dir
# 定义文件分类规则
file_categories = {
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.webp'],
'文档': ['.pdf', '.doc', '.docx', '.txt', '.xlsx', '.pptx', '.csv'],
'视频': ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv'],
'音频': ['.mp3', '.wav', '.flac', '.aac', '.ogg'],
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
'代码': ['.py', '.js', '.html', '.css', '.java', '.cpp', '.h'],
'可执行文件': ['.exe', '.msi', '.sh', '.bat'],
}
# 统计信息
stats = {'moved': 0, 'skipped': 0, 'errors': 0}
# 遍历源文件夹
for file in Path(source_dir).iterdir():
if file.is_file():
file_ext = file.suffix.lower()
moved = False
# 查找匹配的类别
for category, extensions in file_categories.items():
if file_ext in extensions:
# 创建分类文件夹
category_path = Path(target_dir) / category
category_path.mkdir(exist_ok=True)
# 目标文件路径
dest_file = category_path / file.name
# 处理重名文件
counter = 1
while dest_file.exists():
name_without_ext = file.stem
dest_file = category_path / f"{name_without_ext}_{counter}{file_ext}"
counter += 1
try:
if move:
shutil.move(str(file), str(dest_file))
print(f"移动: {file.name} -> {category}/")
else:
shutil.copy2(str(file), str(dest_file))
print(f"复制: {file.name} -> {category}/")
stats['moved'] += 1
except Exception as e:
print(f"错误({file.name}): {e}")
stats['errors'] += 1
moved = True
break
# 未分类的文件
if not moved:
print(f"跳过(未分类): {file.name}")
stats['skipped'] += 1
# 输出统计信息
print(f"\n{'='*40}")
print(f"分类完成!")
print(f"处理文件: {stats['moved'] + stats['skipped']}个")
print(f"已分类: {stats['moved']}个")
print(f"跳过: {stats['skipped']}个")
print(f"错误: {stats['errors']}个")
print(f"{'='*40}")
# 使用示例
if __name__ == "__main__":
# 请修改为你的文件夹路径
source_folder = r"C:\Users\YourName\Downloads"
# 移动文件(默认为移动操作)
classify_files_by_extension(source_folder)
# 或者复制文件(不移动原文件)
# classify_files_by_extension(source_folder, move=False)
进阶版本:自定义规则的智能分类器
import os
import shutil
import re
from pathlib import Path
from datetime import datetime
class SmartFileClassifier:
def __init__(self, source_dir):
self.source_dir = Path(source_dir)
self.rules = []
self.default_folder = "其他文件"
def add_rule(self, folder_name, patterns, use_regex=False):
"""
添加分类规则
:param folder_name: 目标文件夹名称
:param patterns: 匹配模式列表(文件名包含的关键字或正则表达式)
:param use_regex: 是否使用正则表达式匹配
"""
self.rules.append({
'folder': folder_name,
'patterns': patterns,
'use_regex': use_regex
})
def classify_by_date(self, file_path):
"""根据文件修改日期分类"""
mtime = file_path.stat().st_mtime
date = datetime.fromtimestamp(mtime)
return date.strftime("%Y-%m"), date # 返回年月和日期对象
def classify_by_size(self, file_path):
"""根据文件大小分类"""
size = file_path.stat().st_size
if size < 1024 * 1024: # < 1MB
return "小文件(<1MB)"
elif size < 100 * 1024 * 1024: # < 100MB
return "中等文件(1-100MB)"
else:
return "大文件(>100MB)"
def match_rules(self, file_name):
"""匹配自定义规则"""
for rule in self.rules:
for pattern in rule['patterns']:
if rule['use_regex']:
if re.search(pattern, file_name, re.IGNORECASE):
return rule['folder']
else:
if pattern.lower() in file_name.lower():
return rule['folder']
return None
def run(self, mode='move'):
"""
执行分类
:param mode: 'move' 或 'copy' 或 'sort_by_date' 或 'sort_by_size'
"""
stats = {'processed': 0, 'moved': 0, 'errors': 0}
for file in self.source_dir.iterdir():
if not file.is_file():
continue
stats['processed'] += 1
file_name = file.name
try:
# 确定目标文件夹
if mode == 'sort_by_date':
folder_name, _ = self.classify_by_date(file)
elif mode == 'sort_by_size':
folder_name = self.classify_by_size(file)
else:
# 先尝试匹配自定义规则
folder_name = self.match_rules(file_name)
if not folder_name:
# 如果没有匹配,按扩展名分类
ext = file.suffix.lower()[1:] if file.suffix else "无扩展名"
folder_name = ext if ext else self.default_folder
# 创建目标文件夹
dest_folder = self.source_dir / folder_name
dest_folder.mkdir(exist_ok=True)
# 目标文件路径
dest_path = dest_folder / file_name
# 处理重名
counter = 1
while dest_path.exists():
name_parts = file.stem.rsplit('_', 1)
if len(name_parts) > 1 and name_parts[-1].isdigit():
new_name = f"{name_parts[0]}_{int(name_parts[-1]) + 1}{file.suffix}"
else:
new_name = f"{file.stem}_{counter}{file.suffix}"
dest_path = dest_folder / new_name
counter += 1
# 执行移动或复制
if mode == 'move':
shutil.move(str(file), str(dest_path))
print(f"移动: {file_name} -> {folder_name}/")
else:
shutil.copy2(str(file), str(dest_path))
print(f"复制: {file_name} -> {folder_name}/")
stats['moved'] += 1
except Exception as e:
print(f"处理失败 {file_name}: {e}")
stats['errors'] += 1
# 输出统计
print(f"\n{'='*40}")
print(f"处理完成!")
print(f"总计文件: {stats['processed']}")
print(f"成功: {stats['moved']}")
print(f"失败: {stats['errors']}")
print(f"{'='*40}")
# 使用示例
if __name__ == "__main__":
# 初始化分类器
classifier = SmartFileClassifier(r"C:\Users\YourName\Downloads")
# 添加自定义规则
classifier.add_rule("重要项目", ["项目A", "项目B", "v1.0"])
classifier.add_rule("报表", ["report", "统计", "数据", "*.xls*", "*.csv"], use_regex=True)
classifier.add_rule("临时文件", ["temp", "tmp", "~"], use_regex=False)
# 执行不同的分类模式
print("=== 按自定义规则和扩展名分类 ===")
classifier.run(mode='move') # 移动文件
# 或者按日期分类
# print("=== 按日期分类 ===")
# classifier.run(mode='sort_by_date')
# 或者按大小分类
# print("=== 按大小分类 ===")
# classifier.run(mode='sort_by_size')
简单的批处理版本(Windows)
@echo off chcp 65001 >nul文件分类工具 set "source_dir=C:\Users\%USERNAME%\Downloads" cd /d "%source_dir%" echo 正在分类文件... REM 创建分类文件夹 mkdir 图片 2>nul mkdir 文档 2>nul mkdir 视频 2>nul mkdir 音频 2>nul mkdir 压缩包 2>nul mkdir 程序 2>nul REM 移动各种格式的文件 move *.jpg *.jpeg *.png *.gif *.bmp 图片\ 2>nul move *.pdf *.doc *.docx *.txt *.xlsx *.pptx 文档\ 2>nul move *.mp4 *.avi *.mkv *.mov *.wmv 视频\ 2>nul move *.mp3 *.wav *.flac *.aac 音频\ 2>nul move *.zip *.rar *.7z *.tar *.gz 压缩包\ 2>nul move *.exe *.msi *.bat *.cmd 程序\ 2>nul echo 分类完成! pause
使用建议
- 备份重要数据:运行脚本前先备份重要文件
- 测试模式:先在测试文件夹试运行
- 自定义规则:根据你的实际需求修改分类规则
- 增量分类:可以设置定时任务定期运行
这些脚本可以根据你的具体需求进行修改和扩展,需要帮助调整代码或添加特定功能吗?
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播