windows-file-manager

Windows文件管理器 - 原创技能。让AI执行Windows文件操作,包括文件/文件夹的创建、复制、移动、删除、搜索、重命名等。适用于文件整理、批量处理、自动化工作流等场景。

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "windows-file-manager" with this command: npx skills add 534422530/laosi-file-manager

⚠️ 发布规则

所有发布到ClawHub的技能必须严格测试,确定没有问题再发布


技能测试验证清单

  • frontmatter格式正确
  • 操作覆盖完整
  • 安全机制完善
  • 示例清晰
  • 无语法错误

Windows File Manager - Windows文件管理器

原创技能 | 激活词: 文件管理 / 文件操作 / 整理文件

功能概述

功能说明
文件操作创建、删除、复制、移动、重命名
文件夹操作创建、删除、复制、移动
搜索功能按名称、内容、类型搜索
属性管理获取/设置文件属性、时间戳
批量操作批量重命名、批量移动
文件比较比较两个文件差异

安装依赖

pip install shutil pathlib glob2

核心命令

1. 文件操作

import os
import shutil
from pathlib import Path

# 创建文件
def create_file(file_path: str, content: str = ""):
    """创建文件并写入内容"""
    Path(file_path).parent.mkdir(parents=True, exist_ok=True)
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(content)
    return True

# 读取文件
def read_file(file_path: str) -> str:
    """读取文件内容"""
    with open(file_path, 'r', encoding='utf-8') as f:
        return f.read()

# 删除文件
def delete_file(file_path: str) -> bool:
    """删除文件"""
    if os.path.exists(file_path):
        os.remove(file_path)
        return True
    return False

# 复制文件
def copy_file(src: str, dst: str) -> bool:
    """复制文件"""
    Path(dst).parent.mkdir(parents=True, exist_ok=True)
    shutil.copy2(src, dst)
    return True

# 移动文件
def move_file(src: str, dst: str) -> bool:
    """移动文件"""
    Path(dst).parent.mkdir(parents=True, exist_ok=True)
    shutil.move(src, dst)
    return True

# 重命名文件
def rename_file(old_path: str, new_name: str) -> bool:
    """重命名文件"""
    directory = os.path.dirname(old_path)
    new_path = os.path.join(directory, new_name)
    os.rename(old_path, new_path)
    return True

2. 文件夹操作

# 创建文件夹
def create_folder(folder_path: str):
    """创建文件夹"""
    Path(folder_path).mkdir(parents=True, exist_ok=True)
    return True

# 删除文件夹
def delete_folder(folder_path: str):
    """删除文件夹(递归)"""
    shutil.rmtree(folder_path)
    return True

# 复制文件夹
def copy_folder(src: str, dst: str):
    """复制文件夹"""
    shutil.copytree(src, dst)
    return True

# 移动文件夹
def move_folder(src: str, dst: str):
    """移动文件夹"""
    shutil.move(src, dst)
    return True

# 列出文件夹内容
def list_folder(folder_path: str, pattern: str = "*"):
    """列出文件夹内容"""
    path = Path(folder_path)
    files = list(path.glob(pattern))
    return [str(f) for f in files if f.is_file()]

def list_folders(folder_path: str):
    """列出子文件夹"""
    path = Path(folder_path)
    return [str(f) for f in path.iterdir() if f.is_dir()]

3. 搜索功能

import glob

# 按名称搜索
def search_by_name(folder: str, pattern: str) -> list:
    """按名称模式搜索"""
    return glob.glob(f"{folder}/**/{pattern}", recursive=True)

# 按扩展名搜索
def search_by_extension(folder: str, ext: str) -> list:
    """按扩展名搜索"""
    if not ext.startswith('.'):
        ext = '.' + ext
    return glob.glob(f"{folder}/**/*{ext}", recursive=True)

# 搜索包含内容的文件
def search_by_content(folder: str, keyword: str) -> list:
    """搜索包含关键词的文件"""
    results = []
    for file_path in glob.glob(f"{folder}/**/*", recursive=True):
        if os.path.isfile(file_path):
            try:
                with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
                    if keyword in f.read():
                        results.append(file_path)
            except:
                pass
    return results

# 搜索大文件
def find_large_files(folder: str, min_size_mb: int = 10) -> list:
    """查找大于指定大小的文件"""
    results = []
    for file_path in glob.glob(f"{folder}/**/*", recursive=True):
        if os.path.isfile(file_path):
            size_mb = os.path.getsize(file_path) / (1024 * 1024)
            if size_mb >= min_size_mb:
                results.append({
                    'path': file_path,
                    'size_mb': round(size_mb, 2)
                })
    return sorted(results, key=lambda x: x['size_mb'], reverse=True)

4. 批量操作

# 批量重命名
def batch_rename(folder: str, pattern: str, replacement: str):
    """批量重命名文件"""
    files = glob.glob(f"{folder}/{pattern}")
    renamed = []
    for i, file_path in enumerate(files):
        directory = os.path.dirname(file_path)
        filename = os.path.basename(file_path)
        new_name = filename.replace(pattern, replacement)
        new_path = os.path.join(directory, new_name)
        os.rename(file_path, new_path)
        renamed.append((file_path, new_path))
    return renamed

# 批量移动
def batch_move(folder: str, pattern: str, dest_folder: str):
    """批量移动文件"""
    files = glob.glob(f"{folder}/{pattern}")
    Path(dest_folder).mkdir(parents=True, exist_ok=True)
    moved = []
    for file_path in files:
        filename = os.path.basename(file_path)
        dest = os.path.join(dest_folder, filename)
        shutil.move(file_path, dest)
        moved.append((file_path, dest))
    return moved

# 批量复制
def batch_copy(folder: str, pattern: str, dest_folder: str):
    """批量复制文件"""
    files = glob.glob(f"{folder}/{pattern}")
    Path(dest_folder).mkdir(parents=True, exist_ok=True)
    copied = []
    for file_path in files:
        filename = os.path.basename(file_path)
        dest = os.path.join(dest_folder, filename)
        shutil.copy2(file_path, dest)
        copied.append((file_path, dest))
    return copied

# 批量删除
def batch_delete(folder: str, pattern: str):
    """批量删除文件"""
    files = glob.glob(f"{folder}/{pattern}")
    deleted = []
    for file_path in files:
        os.remove(file_path)
        deleted.append(file_path)
    return deleted

5. 文件属性

import datetime

# 获取文件信息
def get_file_info(file_path: str) -> dict:
    """获取文件详细信息"""
    stat = os.stat(file_path)
    return {
        'name': os.path.basename(file_path),
        'path': file_path,
        'size_bytes': stat.st_size,
        'size_mb': round(stat.st_size / (1024 * 1024), 2),
        'created': datetime.datetime.fromtimestamp(stat.st_ctime),
        'modified': datetime.datetime.fromtimestamp(stat.st_mtime),
        'accessed': datetime.datetime.fromtimestamp(stat.st_atime),
        'is_file': os.path.isfile(file_path),
        'is_dir': os.path.isdir(file_path),
    }

# 设置修改时间
def set_modified_time(file_path: str, new_time: datetime.datetime):
    """设置文件修改时间"""
    timestamp = new_time.timestamp()
    os.utime(file_path, (timestamp, timestamp))

# 获取文件夹大小
def get_folder_size(folder_path: str) -> int:
    """获取文件夹总大小"""
    total = 0
    for dirpath, dirnames, filenames in os.walk(folder_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            if os.path.exists(fp):
                total += os.path.getsize(fp)
    return total

6. 安全操作

# 危险操作黑名单
DANGEROUS_PATHS = [
    'C:\\Windows',
    'C:\\Program Files',
    'C:\\Program Files (x86)',
    'C:\\System32',
    'C:\\Users\\pc\\AppData\\Roaming',
    'C:\\Users\\pc\\Desktop',
]

# 安全检查
def safe_check(file_path: str) -> bool:
    """检查操作是否安全"""
    abs_path = os.path.abspath(file_path)
    for dangerous in DANGEROUS_PATHS:
        if dangerous.lower() in abs_path.lower():
            print(f"⚠️ 警告: 路径包含系统目录: {dangerous}")
            return False
    return True

# 确认危险操作
def confirm_dangerous(operation: str, file_path: str):
    """要求确认危险操作"""
    return input(f"⚠️ 确认执行 {operation} {file_path}? (y/n): ").lower() == 'y'

使用场景

场景1: 整理下载文件夹

# 将下载文件夹按类型整理
downloads = "C:\\Users\\pc\\Downloads"

# 创建分类文件夹
create_folder(f"{downloads}\\Images")
create_folder(f"{downloads}\\Documents")
create_folder(f"{downloads}\\Archives")

# 移动文件
batch_move(downloads, "*.jpg", f"{downloads}\\Images")
batch_move(downloads, "*.png", f"{downloads}\\Images")
batch_move(downloads, "*.pdf", f"{downloads}\\Documents")

场景2: 批量重命名

# 将所有文件重命名为序号
folder = "D:\\photos"
files = sorted(list_folder(folder, "*.jpg"))
for i, file in enumerate(files, 1):
    new_name = f"photo_{i:03d}.jpg"
    rename_file(file, new_name)

场景3: 查找重复文件

# 查找同名文件
def find_duplicates(folder: str):
    files = {}
    for file_path in glob.glob(f"{folder}/**/*", recursive=True):
        if os.path.isfile(file_path):
            name = os.path.basename(file_path)
            if name in files:
                files[name].append(file_path)
            else:
                files[name] = [file_path]
    return {k: v for k, v in files.items() if len(v) > 1}

输出格式

## 文件操作报告

### 操作结果
- **状态**: ✅ 成功 / ❌ 失败
- **操作**: 批量移动
- **数量**: 15个文件

### 操作详情
✅ 移动: photo1.jpg → Images/photo1.jpg
✅ 移动: photo2.jpg → Images/photo2.jpg
✅ 移动: photo3.jpg → Images/photo3.jpg
...

### 错误
无

### 统计
- 成功: 15
- 失败: 0
- 总大小: 45.2MB

集成建议

配合技能效果
windows-app-controller控制资源管理器操作
clipboard-manager配合文件路径操作
workflow-verifier验证文件操作安全

原创性声明

本技能为原创,融合了:

  • Python os/shutil模块
  • pathlib路径处理
  • glob模式匹配
  • Windows文件操作最佳实践

作者: laosi 创建日期: 2026-04-28

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

WeChat File Sender

Send files via Windows WeChat desktop client by automating window control, clipboard, and keyboard input using Node.js and PowerShell scripts.

Registry SourceRecently Updated
1620Profile unavailable
Automation

Windows应用控制器

Windows应用控制器 - 原创技能。让AI通过自动化技术控制Windows应用程序,包括打开/关闭应用、点击按钮、填写表单、截取屏幕等操作。适用于GUI自动化、测试、数据录入等场景。

Registry SourceRecently Updated
260Profile unavailable
Automation

Ai File Organizer

AI 智能文件整理 - 批量重命名、自动分类、智能归档(异步引擎 + 云同步)

Registry SourceRecently Updated
2560Profile unavailable
Automation

WSL-PowerShell Controller

Control Windows PowerShell from WSL by executing commands and scripts on the Windows host using mounted Windows executables.

Registry SourceRecently Updated
3910Profile unavailable