批量删除 node_modules 文件夹(Windows 一键脚本)

在多项目环境下,node_modules 体积庞大、数量众多,占用磁盘空间且影响文件检索效率。本文介绍一个 Windows 批处理脚本,一键递归查找并删除指定路径下的所有 node_modules 文件夹,支持确认提示与删除统计。

适用场景

  • 磁盘清理: 清空老旧/不再使用项目的依赖目录,释放空间。
  • 项目归档前: 删除依赖后再压缩项目,显著减小包体积。
  • 批量操作: 同时处理多个项目根目录中的 node_modules

功能特点

  • 递归扫描: 从指定路径向下,自动发现所有名为 node_modules 的目录。
  • 操作确认: 删除前需输入 yes 确认,避免误删。
  • 结果统计: 展示成功/失败数量,过程可视化输出。
  • UTF-8 输出: 使用 chcp 65001 保证中文输出不乱码。
  • 路径兼容: 兼容带空格路径(已使用引号包裹)。
  • 安全健壮: 路径存在性校验、零结果早退出、临时文件自动清理。

使用方法

支持三种常见用法(任选其一):

  1. 双击运行(当前目录)

    • remove_node_modules.bat 放到需要清理的目录下,双击执行。
  2. 拖拽目录到脚本

    • 把目标文件夹拖拽到 remove_node_modules.bat 上,自动以该目录为扫描根路径。
  3. 命令行执行

    1
    2
    3
    4
    5
    6
    rem 在脚本所在目录,清理当前目录
    remove_node_modules.bat

    rem 指定目标路径(支持绝对/相对路径;路径含空格需加引号)
    remove_node_modules.bat "D:\Projects"
    remove_node_modules.bat ..\..\workspaces

执行后流程示例:

  1. 输出扫描根路径 → 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(不区分大小写设置为严格匹配,当前脚本是区分大小写的精确匹配)。
  • Q: 提示路径不存在?
    • A: 确认传入路径正确且加了引号(路径含空格时)。
  • Q: 出现“拒绝访问”或部分删除失败?
    • A: 尝试以管理员身份运行;关闭占用该目录的程序;或先在资源管理器中手动删除该节点后重试。

完整脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo ================================================
echo 批量删除node_modules文件夹工具
echo ================================================
echo.

REM 设置默认路径为当前目录
set "TARGET_PATH=%~1"
if "%TARGET_PATH%"=="" set "TARGET_PATH=."

REM 检查路径是否存在
if not exist "%TARGET_PATH%" (
echo 错误: 指定的路径不存在: %TARGET_PATH%
pause
exit /b 1
)

echo 搜索路径: %TARGET_PATH%
echo.

REM 搜索所有node_modules文件夹
echo 正在搜索node_modules文件夹...
set /a count=0
set /a total_size=0

REM 创建临时文件存储找到的文件夹
set "temp_file=%temp%\node_modules_list.txt"
del "%temp_file%" 2>nul

REM 使用for循环递归搜索
for /r "%TARGET_PATH%" /d %%i in (node_modules) do (
if exist "%%i" (
set /a count+=1
echo 找到: %%i
echo %%i>>"%temp_file%"
)
)

if %count%==0 (
echo 未找到任何node_modules文件夹。
pause
exit /b 0
)

echo.
echo 总共找到 %count% 个node_modules文件夹
echo.

REM 确认删除
set /p confirm="是否删除所有找到的node_modules文件夹? (输入 yes 确认): "
if /i not "%confirm%"=="yes" (
echo 操作已取消。
pause
exit /b 0
)

echo.
echo 开始删除node_modules文件夹...
set /a deleted=0
set /a failed=0

REM 读取临时文件并删除每个文件夹
for /f "usebackq delims=" %%i in ("%temp_file%") do (
echo 正在删除: %%i
rd /s /q "%%i" 2>nul
if exist "%%i" (
echo ✗ 删除失败
set /a failed+=1
) else (
echo ✓ 删除成功
set /a deleted+=1
)
)

REM 清理临时文件
del "%temp_file%" 2>nul

echo.
echo ================================================
echo 删除完成
echo 成功删除: %deleted% 个文件夹
echo 删除失败: %failed% 个文件夹
echo ================================================
echo.
echo 脚本执行完成。
pause

  • 建议将该脚本置于个人工具箱仓库,方便多机复用。
  • 如需“模拟删除(dry-run)”“忽略特定路径/层级”等高级功能,可在此脚本基础上继续扩展。