Node.js Glob无法显示Windows磁盘根目录下的文件/文件夹
解决Windows下Glob遍历磁盘根目录返回空的问题
问题原因
在Windows系统中,C:/*这个路径模式不符合Glob的解析规则:
C:表示当前工作目录所在的C盘目录(而非C盘根目录),如果Node进程当前不在C盘,Glob会找不到对应内容,返回空数组。- 正确的C盘根目录路径应该写成
C:/或者C:\\(转义后的反斜杠),配合通配符才能正确匹配根目录下的内容。
另外,默认的*通配符只会匹配当前层级的文件/文件夹,无法递归获取子目录,要生成完整的层级树还需要开启递归配置。
解决方案
1. 使用正确的根路径模式
将根目录的匹配模式改为 C:/**(** 表示递归匹配所有子目录),同时开启 recursive: true 和 mark: true 选项:
recursive: true:允许Glob递归遍历所有子目录mark: true:在文件夹路径末尾添加斜杠,方便区分文件和文件夹
2. 生成指定格式的层级树
通过过滤文件夹路径,再根据路径的层级结构生成缩进格式的目录树。
完整代码示例
const Glob = require('glob'); const path = require('path'); // 遍历C盘根目录下所有文件夹(递归) const mg = new Glob('C:/**', { mark: true, recursive: true, ignore: ['**/node_modules/**'] // 可选:忽略不需要的目录 }, function (err, matches) { if (err) { console.error(err); return; } // 过滤出所有文件夹(路径末尾带斜杠的) const folders = matches.filter(item => item.endsWith('/')); // 生成层级树格式 console.log('Disk Drive (C:/)'); folders.forEach(folder => { // 计算目录层级:去掉根路径后按斜杠分割,减去1(根目录本身不算层级) const relativePath = path.relative('C:/', folder); const level = relativePath.split('/').length - 1; // 根据层级生成缩进:一级目录用"- ",二级及以上每级加两个"-" const indent = level === 0 ? '- ' : '--'.repeat(level) + ' '; // 获取当前目录名称 const folderName = path.basename(folder.replace(/\/$/, '')); console.log(`${indent}${folderName}`); }); });
补充说明
- 如果需要遍历其他磁盘(如D盘),只需将路径模式改为
D:/**即可。 - 若遇到权限问题(如无法访问系统保护目录),可以通过
ignore选项排除这些目录,避免报错。 - 也可以使用
glob.sync()同步方法,写法更简洁,但大目录下异步方式更友好。
内容的提问来源于stack exchange,提问作者Catalin Mihalcea
相关产品推荐
相关产品推荐

