
如何使用 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