You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:25:19