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

如何在bat文件中用dir /B /S生成文件列表时排除指定目录

如何在bat脚本中生成目录文件列表时排除特定目录

方法1:用dir配合findstr快速过滤

这是最简单的方案,适合排除少量固定目录。通过dir输出所有内容后,用findstr反向匹配排除包含目标目录路径的行。

比如要排除node_modules和temp这两个目录,执行以下命令:

dir /B /S | findstr /V /I /C:"\\node_modules\\" /C:"\\temp\\" > FulList.txt

参数说明:

  • /V:反向匹配,只保留不匹配的行(即排除符合条件的内容)
  • /I:忽略大小写,避免因目录名大小写不同漏排除
  • \\:转义反斜杠,确保匹配的是完整目录(比如避免误排除文件名包含node_modules的文件)

方法2:用for循环实现灵活排除

如果需要排除多个目录、带空格的目录,或者有更复杂的排除规则,推荐用for循环遍历并手动判断跳过。

示例脚本:

@echo off
setlocal enabledelayedexpansion

:: 定义要排除的目录,多个用空格分隔,带空格的目录加引号
set "exclude_dirs=node_modules temp ".git" "My Documents""

:: 清空或创建目标文件
> FulList.txt (
    :: 遍历所有文件
    for /r %%f in (*) do (
        set "item_path=%%f"
        set "skip_flag="
        :: 检查当前文件路径是否包含要排除的目录
        for %%d in (!exclude_dirs!) do (
            if "!item_path:\\%%~d\\" neq "!item_path!" set "skip_flag=1"
        )
        :: 不包含则写入文件
        if not defined skip_flag echo %%f
    )
    :: 遍历所有目录
    for /d /r %%d in (*) do (
        set "item_path=%%d"
        set "skip_flag="
        for %%e in (!exclude_dirs!) do (
            if "!item_path:\\%%~e\\" neq "!item_path!" set "skip_flag=1"
        )
        if not defined skip_flag echo %%d
    )
)

endlocal

说明:

  • enabledelayedexpansion:开启延迟变量扩展,确保循环内变量能正确更新
  • %%~d:去除目录名的引号,避免路径判断出错
  • 脚本会分别遍历文件和目录,确保两者都能被正确排除后写入列表

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:55:03