如何让CMD显示正在扫描的文件夹?附多媒体文件搜索批处理代码
解决方案:让CMD实时显示正在扫描的文件夹
没问题!要实现实时显示当前扫描的文件夹,我们需要调整原来的批处理逻辑——原来用dir /s是一次性递归搜索,没法中途输出文件夹路径;换成for /r循环逐个遍历文件夹,就能在进入每个符合条件的文件夹时输出路径,同时保留你的排除规则。
下面提供两种修改方案,你可以根据自己的偏好选择:
方案1:统一遍历文件夹,同时搜索所有扩展名
这个方案会先遍历每个文件夹,检查是否需要排除,然后在该文件夹里一次性搜索所有多媒体格式,实时显示当前扫描的文件夹:
@echo off setlocal enabledelayedexpansion cd /d C:\ :: 显示排除规则说明 echo ______________________________________________________________________________________________________________________ echo. echo This batch file will search for multimedia files in Drive C: but will exclude the folders with the following keywords: echo. echo 1. microsoft echo 2. windows echo 3. cisco echo 4. landesk echo 5. adobe echo ______________________________________________________________________________________________________________________ echo. echo. :: 初始化输出文件(清空原有内容) echo File List > output1.csv :: 定义要排除的关键词(用|分隔,方便findstr批量匹配) set "exclude_keywords=microsoft|windows|cisco|landesk|adobe" :: 定义需要搜索的多媒体扩展名 set "target_extensions=mp3 mp4 jpg png mkv" :: 递归遍历C盘下的所有文件夹 for /r %%d in (.) do ( :: 获取当前文件夹的完整绝对路径 set "current_folder=%%~fd" :: 检查当前文件夹是否包含排除关键词(不区分大小写) echo !current_folder! | findstr /i /c:"%exclude_keywords%" >nul if errorlevel 1 ( :: 如果文件夹不需要排除,实时显示正在扫描的路径 echo Scanning: !current_folder! :: 在当前文件夹下搜索所有目标扩展名的文件,追加到输出CSV for %%e in (%target_extensions%) do ( dir /b "!current_folder!\*.%%e" >> output1.csv ) ) ) echo. echo Done Searching... Pause endlocal
方案2:按扩展名分组搜索(保留原提示风格)
如果你想保留原来的“Searching for MP3...”这类提示,同时显示每个扩展名对应的扫描文件夹,可以用子过程把重复逻辑抽出来,结构更清晰:
@echo off setlocal enabledelayedexpansion cd /d C:\ :: 显示排除规则说明 echo ______________________________________________________________________________________________________________________ echo. echo This batch file will search for multimedia files in Drive C: but will exclude the folders with the following keywords: echo. echo 1. microsoft echo 2. windows echo 3. cisco echo 4. landesk echo 5. adobe echo ______________________________________________________________________________________________________________________ echo. echo. :: 初始化输出文件 echo File List > output1.csv :: 定义要排除的关键词 set "exclude_keywords=microsoft|windows|cisco|landesk|adobe" :: 逐个处理每种多媒体格式 echo Searching for MP3... call :scan_for_extension "mp3" echo Searching for MP4... call :scan_for_extension "mp4" echo Searching for JPG... call :scan_for_extension "jpg" echo Searching for PNG... call :scan_for_extension "png" echo Searching for MKV... call :scan_for_extension "mkv" echo. echo Done Searching... Pause endlocal :: 子过程:搜索指定扩展名的文件,同时显示扫描路径 :scan_for_extension set "ext=%~1" for /r %%d in (.) do ( set "current_folder=%%~fd" :: 检查是否排除当前文件夹 echo !current_folder! | findstr /i /c:"%exclude_keywords%" >nul if errorlevel 1 ( echo Scanning for .%ext%: !current_folder! dir /b "!current_folder!\*.%ext%" >> output1.csv ) ) goto :eof
关键逻辑说明
- 延迟扩展(
enabledelayedexpansion):因为在for循环中需要动态读取和更新变量(比如current_folder),必须启用延迟扩展,用!变量名!来读取循环中的实时值。 - 文件夹排除检查:通过
findstr /i不区分大小写检查文件夹路径是否包含排除关键词,errorlevel 1表示未匹配到(即文件夹不需要排除)。 - 实时路径输出:每次进入符合条件的文件夹时,用
echo输出当前路径,让用户清楚程序的运行状态。
内容的提问来源于stack exchange,提问作者7thGen




