批处理中用wmic logicaldisk查找未知盘符随机路径下的三个指定文件夹
实现方案
直接替换原有脚本为以下完整版本即可,功能包含原有的可用卷检测+目标盘符查找逻辑:
@echo off SETLOCAL ENABLEDELAYEDEXPANSION CLS&ECHO.&ECHO Vol Access Type echo. SET "DVF=" FOR /F "tokens=1,*" %%A IN ('wmic logicaldisk get caption^, description ^| FIND ":"') DO ( VOL %%A >nul 2>&1 && ( CALL SET "DVF=%%DVF%% %%A"& ECHO %%A ^| ON. %%B) || ( ECHO %%A ^| OFF. %%B ) ) ECHO. ECHO. ECHO Available Volumes: %DVF% echo. echo. TIMEOUT /T 5 :: 查找包含三个目标文件夹的盘符 SET "foldervol=" FOR %%V IN (%DVF%) DO ( SET "f1=0" SET "f2=0" SET "f3=0" :: 递归查找Folder1 FOR /F "delims=" %%P IN ('dir /s /b /ad "%%V\Folder1" 2^>nul') DO SET "f1=1" :: 递归查找Folder2 FOR /F "delims=" %%P IN ('dir /s /b /ad "%%V\Folder2" 2^>nul') DO SET "f2=1" :: 递归查找带空格的Folder 3 FOR /F "delims=" %%P IN ('dir /s /b /ad "%%V\Folder 3" 2^>nul') DO SET "f3=1" :: 三个文件夹同时存在则匹配成功 IF !f1! EQU 1 IF !f2! EQU 1 IF !f3! EQU 1 ( SET "foldervol=%%V" ECHO 匹配成功,目标文件夹所在盘符为:!foldervol! GOTO RUN_NEXT ) ) :: 未匹配到的异常处理 ECHO 错误:未找到同时包含三个指定文件夹的可用卷 PAUSE EXIT :RUN_NEXT :: 此处替换为你自己的后续业务代码 ECHO 即将执行后续逻辑,目标盘符变量foldervol值为:%foldervol% PAUSE ENDLOCAL
逻辑说明
- 新增延迟变量扩展配置,保证for循环内部的变量修改可以正常读取
- 仅遍历所有已检测到的可用卷,不会访问未挂载卷,不会触发CMD报错
- 递归搜索每个盘符下的目标文件夹,支持任意上层路径,带空格的
Folder 3通过引号包裹保证路径识别正确 - 只要盘符下存在至少一个对应文件夹就判定匹配,三个文件夹同时存在时才会赋值
%foldervol%变量,匹配成功后直接跳转到后续代码段 - 新增未匹配到目标的异常提示逻辑,避免脚本无响应
内容的提问来源于stack exchange,提问作者haseakash
相关产品推荐
相关产品推荐

