NNMHUB
🗂️

批量整理文件

免费在线

按扩展名或日期把散乱文件自动归入分类/月份子文件夹。

Windows整理归档

🗂️Windows 本地工具 · 使用介绍

使用介绍

用途:把下载目录/桌面等散乱文件自动归类:

  • 按扩展名:图片 / 文档 / 视频 / 音频 / 压缩包 / 其他
  • 按日期:按修改时间归档到 `2026-08` 这种月份文件夹

使用步骤:

1.下载脚本,双击 `run.bat` 运行

2.输入目录,选择 1 按扩展名 / 2 按日期

3.完成后文件已被移动到新建的分类文件夹

安全说明:只移动文件(目标同名时跳过),不删除;建议先复制一份目录测试。

下载脚本 (.ps1) 双击启动器 (.bat)建议两个都下载,放到同一文件夹

脚本为纯文本(PowerShell),可先用记事本打开查看源码再运行;仅在本机执行,不会上传任何数据。 首次运行如被系统拦截,右键脚本 → 属性 → 解除锁定,或用启动器(已带 ExecutionPolicy Bypass)运行。

脚本源码预览(可复制)

# ==================================================
# 批量整理文件(NMHUB 牛马工具)
# 按扩展名或日期自动归入子文件夹(如 图片/文档/2026-08/)
# 安全:只移动文件到新建的分类文件夹,不删除
# ==================================================
$ErrorActionPreference = "Continue"

Write-Host ""
Write-Host "========== 批量整理文件 ==========" -ForegroundColor Cyan

$dir = Read-Host "请输入要整理的目录(回车 = 当前目录)"
if (-not $dir) { $dir = (Get-Location).Path }
if (-not (Test-Path -LiteralPath $dir)) {
    Write-Host "路径不存在。" -ForegroundColor Red
    Read-Host "按回车退出"; exit 1
}

Write-Host "1) 按扩展名分类(图片/文档/视频/音频/压缩包/其他)"
Write-Host "2) 按日期归档(YYYY-MM 子文件夹)"
$mode = Read-Host "选择 1/2"

$files = Get-ChildItem -LiteralPath $dir -File
if ($files.Count -eq 0) { Write-Host "没有文件。" -ForegroundColor Yellow; Read-Host "按回车退出"; exit }

$map = @{
    ".jpg" = "图片"; ".jpeg" = "图片"; ".png" = "图片"; ".gif" = "图片"; ".webp" = "图片"; ".bmp" = "图片"; ".svg" = "图片"
    ".doc" = "文档"; ".docx" = "文档"; ".pdf" = "文档"; ".txt" = "文档"; ".md" = "文档"; ".xls" = "文档"; ".xlsx" = "文档"; ".ppt" = "文档"; ".pptx" = "文档"; ".csv" = "文档"
    ".mp4" = "视频"; ".mkv" = "视频"; ".avi" = "视频"; ".mov" = "视频"; ".webm" = "视频"; ".flv" = "视频"
    ".mp3" = "音频"; ".wav" = "音频"; ".flac" = "音频"; ".m4a" = "音频"; ".aac" = "音频"; ".ogg" = "音频"
    ".zip" = "压缩包"; ".rar" = "压缩包"; ".7z" = "压缩包"; ".tar" = "压缩包"; ".gz" = "压缩包"
}

$moved = 0
foreach ($f in $files) {
    if ($mode -eq "1") {
        $folder = $map[$f.Extension.ToLower()]
        if (-not $folder) { $folder = "其他" }
    } else {
        $folder = $f.LastWriteTime.ToString("yyyy-MM")
    }
    $targetDir = Join-Path $dir $folder
    New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
    $target = Join-Path $targetDir $f.Name
    if (Test-Path -LiteralPath $target) {
        Write-Host "跳过(目标已存在): $($f.Name)" -ForegroundColor Yellow
        continue
    }
    Move-Item -LiteralPath $f.FullName -Destination $target -ErrorAction SilentlyContinue
    if ($?) { $moved++ }
}
Write-Host ""
Write-Host "完成,移动 $moved / $($files.Count) 个文件。" -ForegroundColor Green
Read-Host "按回车退出"