【工具】如何使用 Windows BAT 批处理脚本递归删除指定后缀文件(附:完整代码,复制可用)


如何使用 Windows BAT 批处理脚本递归删除指定后缀文件(附:完整代码,复制可用)


文章目录

  • [如何使用 Windows BAT 批处理脚本递归删除指定后缀文件(附:完整代码,复制可用)](#如何使用 Windows BAT 批处理脚本递归删除指定后缀文件(附:完整代码,复制可用))
    • 前言
    • 一、需求背景与场景分析
      • [1. 自动定位 BAT 的父目录](#1. 自动定位 BAT 的父目录)
      • [2. 递归删除(包括所有子目录)](#2. 递归删除(包括所有子目录))
      • [3. 支持交互式输入文件后缀](#3. 支持交互式输入文件后缀)
    • 二、设计思路
      • [1. 自动识别脚本路径与父目录](#1. 自动识别脚本路径与父目录)
      • [2. 友好交互:输入文件后缀](#2. 友好交互:输入文件后缀)
      • [3. 删除前确认机制](#3. 删除前确认机制)
      • [4. 递归删除文件](#4. 递归删除文件)
    • 三、使用方式
    • 四、总结
      • [1. 运行截图](#1. 运行截图)
      • [2. 流程图](#2. 流程图)
      • [3. 完整代码](#3. 完整代码)

前言

在实际的软件开发中,我们经常会面对各种自动化需求,其中一种十分常见的场景是:批量删除某个目录(含子目录)下的指定后缀文件

比如:

  • Unity 工程中大量 .meta 文件需要清理
  • Android/Java 构建中遗留的 .class.tmp 文件需要移除
  • Git 测试版本遗留 .private 文件需要删除
  • 项目编译残留 .bak.log 文件需要整理

虽然手动删除也能做到,但复杂工程往往包含成千上万文件。
此时,一个自动化的批处理(BAT)脚本能瞬间提升工作效率。

本篇文章将从需求分析、脚本设计、交互优化到实际使用,带你完整实现一个:"支持用户输入后缀、自动定位 BAT 父目录、递归删除指定后缀文件"的完美脚本。

并提供了一个可直接使用的成品脚本供你复制。


一、需求背景与场景分析

在你当前的项目(包括 Unity、Android、VR 相关开发工具链)中,批量文件管理是一个常见需求:

  • Unity 中 .meta 文件数量巨大,有时需要批量清理迁移后遗留的 meta
  • 个人工具封装后需要一键清除工程中的临时资源
  • 大量自动生成的文本文件 .txt.generated.cache 需要快速移除
  • VR 工程中用脚本生成的中间 .asset_temp 文件会影响构建

同时,你提出一个核心需求:

"删除当前 BAT 文件的父文件夹下所有指定后缀文件,并希望脚本支持控制台输入文件后缀,提示要英文化、交互友好。"

这其实包含 3 层核心需求:


1. 自动定位 BAT 的父目录

普通脚本必须手动写死路径,比如:

复制代码
D:\MyProject

但你的需求是:

脚本放在哪里,就自动清理它上一级目录。

即:

复制代码
... \Tools\delete.bat

会自动作用于:

复制代码
...\

这让脚本可以随工程移动,非常适合版本管理和共享工具。


2. 递归删除(包括所有子目录)

Windows 批处理的 for /r 语句可以轻松做到这一点。

例如:

复制代码
for /r "%FOLDER%" %%f in (*.meta) do ...

即可扫描所有子目录。


3. 支持交互式输入文件后缀

即运行脚本时由用户输入:

复制代码
meta
tmp
log
private

无需修改 bat 本身。

这让脚本极其通用、可扩展。


二、设计思路

为了让脚本更通用、更易懂、更安全,我们将整个 BAT 脚本设计分为以下几个模块:


1. 自动识别脚本路径与父目录

使用以下语句:

复制代码
set "CUR_DIR=%~dp0"
for %%i in ("%CUR_DIR%\..") do set "PARENT_DIR=%%~fi"

其中:

  • %~dp0 代表当前 BAT 所在文件夹路径
  • ..\ 代表上一级目录(父目录)
  • %%~fi 提取路径标准格式

最终 PARENT_DIR 即是目标操作目录。


2. 友好交互:输入文件后缀

复制代码
set /p EXT=Please enter the file extension to delete:

为什么不加点?

因为避免用户输入 .meta 导致脚本生成 ..meta

让用户输入:

复制代码
meta

脚本自动组合:

复制代码
*.meta

最优雅也最安全。


3. 删除前确认机制

避免误删是非常重要的。

所以设计一个确认:

复制代码
Are you sure? (Y/N):

并加入大小写不敏感判断:

复制代码
if /i "%confirm%" neq "Y" ...

这保证用户必须明确输入大写或小写 Y 才执行删除。


4. 递归删除文件

核心命令:

复制代码
for /r "%PARENT_DIR%" %%f in (*.%EXT%) do del /f /q "%%f"

其中:

  • /r → 递归扫描所有子目录
  • /f → 强制删除(甚至只读)
  • /q → 静默(不出现确认提示)
  • "%%f" → 每个文件路径

为了给用户反馈,我们会打印:

复制代码
Deleting: xxx...

确保用户知道脚本在做什么。


三、使用方式

假设目录结构如下:

复制代码
D:\Project\
 ├─ Assets\
 ├─ Scripts\
 └─ Tools\
      └─ delete_by_suffix.bat

当你运行 BAT:

复制代码
Please enter the file extension to delete (example: meta): meta

脚本会自动清理:

复制代码
D:\Project\

下的所有 .meta 文件,包括子目录:

  • Assets\xxx.meta
  • Scripts\yyy.meta
  • 任意深度的文件夹

不需要你每次改脚本路径。

这对 Unity 工程特别友好。


四、总结

本篇文章从一个简单的需求出发,扩展到了完整的脚本设计、增强、工程化实践。

最终得到了一个通用脚本工具。

无论你在:

  • Unity 项目清理 .meta
  • 安卓项目清理 .tmp
  • 版本管理清理 .private
  • 工程构建清理 .cache
  • 自定义工具链批量处理临时文件

都能使用这个脚本,无需任何修改。

1. 运行截图

2. 流程图

3. 完整代码

复制即可使用

bat 复制代码
@echo off
::----------------------------------------------------
:: Delete files with a user-specified extension
:: in the parent folder of this BAT script
::----------------------------------------------------

:: Get current script directory
set "CUR_DIR=%~dp0"

:: Get the parent folder
for %%i in ("%CUR_DIR%\..") do set "PARENT_DIR=%%~fi"

echo.
echo ===============================================
echo  Current BAT Directory:
echo  %CUR_DIR%
echo.
echo  Target Parent Folder:
echo  %PARENT_DIR%
echo ===============================================
echo.

:: Ask user to input extension
set /p EXT=Please enter the file extension to delete (example: meta): 

if "%EXT%"=="" (
    echo [Error] The extension cannot be empty!
    pause
    exit /b
)

echo.
echo You entered: .%EXT%
set /p confirm=Are you sure you want to delete all .%EXT% files? (Y/N): 

if /i "%confirm%" neq "Y" (
    echo Operation canceled.
    pause
    exit /b
)

echo.
echo Deleting all .%EXT% files under %PARENT_DIR% ...
echo.

:: Recursive delete
for /r "%PARENT_DIR%" %%f in (*.%EXT%) do (
    echo Deleting: %%f
    del /f /q "%%f"
)

echo.
echo ===============================================
echo  All .%EXT% files have been deleted successfully!
echo ===============================================
pause

相关推荐
sleP4o1 小时前
Windows 11 24H2 配置WSL2 + Docker
windows·docker·容器
潘晓可1 小时前
WSL - 解决虚拟专用网络连接下无法访问网络的问题
windows
张较瘦_2 小时前
Windows Docker使用实战教程
windows·docker·容器
邮专薛之谦7 小时前
Kotlin 全知识点复习+详细梳理
windows·kotlin·android studio·idea
自动化代码美学7 小时前
【Python3.13】官网学习之控制流
开发语言·windows·python·学习
q***333712 小时前
新版 WSL2 2.0 设置 Windows 和 WSL 镜像网络教程
windows
未来之窗软件服务17 小时前
幽冥大陆(二十二)dark语言智慧农业电子秤读取——东方仙盟炼气期
开发语言·windows·golang·东方仙盟·东方仙盟sdk
黎茗Dawn19 小时前
git-Windows-my-dell-笔记
开发语言·windows·git
2501_915921431 天前
Windows 系统下的 IPA 加密工具实战指南,如何在非 macOS 环境完成 IPA 混淆、加固与工程化处理
android·windows·macos·ios·小程序·uni-app·iphone