如何在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
相关产品推荐
相关产品推荐

