批量删除 node_modules 文件夹(Windows 一键脚本)
在多项目环境下,node_modules 体积庞大、数量众多,占用磁盘空间且影响文件检索效率。本文介绍一个 Windows 批处理脚本,一键递归查找并删除指定路径下的所有 node_modules 文件夹,支持确认提示与删除统计。
适用场景
- 磁盘清理: 清空老旧/不再使用项目的依赖目录,释放空间。
- 项目归档前: 删除依赖后再压缩项目,显著减小包体积。
- 批量操作: 同时处理多个项目根目录中的
node_modules。
功能特点
- 递归扫描: 从指定路径向下,自动发现所有名为
node_modules的目录。 - 操作确认: 删除前需输入
yes确认,避免误删。 - 结果统计: 展示成功/失败数量,过程可视化输出。
- UTF-8 输出: 使用
chcp 65001保证中文输出不乱码。 - 路径兼容: 兼容带空格路径(已使用引号包裹)。
- 安全健壮: 路径存在性校验、零结果早退出、临时文件自动清理。
使用方法
支持三种常见用法(任选其一):
双击运行(当前目录)
- 将
remove_node_modules.bat放到需要清理的目录下,双击执行。
- 将
拖拽目录到脚本
- 把目标文件夹拖拽到
remove_node_modules.bat上,自动以该目录为扫描根路径。
- 把目标文件夹拖拽到
命令行执行
1
2
3
4
5
6rem 在脚本所在目录,清理当前目录
remove_node_modules.bat
rem 指定目标路径(支持绝对/相对路径;路径含空格需加引号)
remove_node_modules.bat "D:\Projects"
remove_node_modules.bat ..\..\workspaces
执行后流程示例:
- 输出扫描根路径 → 2) 递归搜索
node_modules→ 3) 列表统计 → 4) 输入yes确认 → 5) 逐个删除并展示 ✓/✗ → 6) 汇总成功/失败个数。
参数说明
- 第一个(可选)参数:
TARGET_PATH- 不传时默认使用当前目录
. - 路径不存在会直接报错并退出
- 不传时默认使用当前目录
实现原理(脚本关键点)
chcp 65001切换控制台编码为 UTF-8,中文不乱码。setlocal enabledelayedexpansion开启延迟变量展开,确保循环中计数等变量正确。if not exist "%TARGET_PATH%"做路径存在性校验。- 使用
for /r /d递归遍历目录,匹配名为node_modules的文件夹。 - 先把匹配到的路径写入临时文件,再统一读取并删除,避免遍历过程中文件系统结构变化导致的遍历异常。
- 删除使用
rd /s /q静默递归删除,删除后再次if exist校验统计成功/失败。 - 结束时清理临时文件并打印汇总结果。
注意事项
- 谨慎操作: 删除不可恢复,建议先确认路径是否正确,再输入
yes。 - 权限问题: 某些目录需要管理员权限;必要时以管理员身份运行命令行/脚本。
- 正在占用: 若文件夹被占用(如编辑器/终端正在使用),可能删除失败;请关闭相关进程后重试。
- 长路径限制: 极长路径可能导致删除失败,可开启 Windows 长路径支持或在更高层级执行清理。
- 网络/同步盘: 网络盘/同步盘(如 OneDrive)删除速度可能较慢或受限。
常见问题(FAQ)
- Q: 输入确认后没有删除?
- A: 必须精确输入
yes(不区分大小写设置为严格匹配,当前脚本是区分大小写的精确匹配)。
- A: 必须精确输入
- Q: 提示路径不存在?
- A: 确认传入路径正确且加了引号(路径含空格时)。
- Q: 出现“拒绝访问”或部分删除失败?
- A: 尝试以管理员身份运行;关闭占用该目录的程序;或先在资源管理器中手动删除该节点后重试。
完整脚本
1 | @echo off |
- 建议将该脚本置于个人工具箱仓库,方便多机复用。
- 如需“模拟删除(dry-run)”“忽略特定路径/层级”等高级功能,可在此脚本基础上继续扩展。