如何通过批处理读取目录指定后缀文件构建带编号可选菜单
批处理带子菜单选择指定目录文件解决方案
原代码问题梳理
- 输入语句语法错误:接收用户输入的
set /C为错误用法,正确接收键盘输入应使用set /p参数 - 缺少编号与文件的映射逻辑:仅遍历输出文件名,未将编号对应的文件名存储为变量,输入数字后无法匹配到对应文件
- 未开启延迟变量扩展:批处理默认预处理时就会解析所有
%包裹的变量,循环内动态赋值的变量需要开启延迟扩展用!变量名!读取才能生效 - 硬编码路径冗余:同一路径多次重复书写,后续修改维护成本高
修正后可运行完整代码
@echo off setlocal enabledelayedexpansion :: 统一配置目标目录,后续修改只需要改这里即可 set "config_dir=C:\Users\Murray\Documents\ConfigFiles\" cd /d "%config_dir%" :: 遍历conf文件,建立编号和文件名的映射,同时输出菜单 set "count=0" echo ===== 配置文件选择菜单 ===== for %%F in (*.conf) do ( set /a count+=1 :: 存储编号对应的文件名 set "file_!count!=%%~nF" set "file_full_!count!=%%F" echo !count!. %%~nF ) echo 文件总数:%count% echo. :: 接收用户输入 set "choice=" set /p "choice=请输入对应编号选择文件: " :: 校验输入合法性 if not defined choice ( echo 输入不能为空 pause exit /b ) :: 判断输入是不是数字 for /f "delims=0123456789" %%i in ("%choice%") do ( echo 输入必须是有效数字 pause exit /b ) :: 判断输入数字是否在合法范围内 if %choice% lss 1 ( echo 输入编号不能小于1 pause exit /b ) if %choice% gtr %count% ( echo 输入编号不能大于%count% pause exit /b ) :: 匹配到对应的文件 set "selected_file=!file_%choice%!" set "selected_full_path=!file_full_%choice%!" echo 你选择的文件是:%selected_file%,完整路径:%selected_full_path% :: 选中文件后子菜单逻辑,可按需修改 :SUBMENU echo ===== 子菜单:%selected_file% ===== echo 此处可添加对应文件的操作逻辑,示例:打开文件可写 notepad "%selected_full_path%" :: 结束逻辑 pause endlocal goto :eof :NOFILE echo 所选文件不存在 pause endlocal goto :eof
功能说明
- 自动遍历指定目录下所有
.conf后缀文件,自动生成编号菜单,菜单显示文件无后缀名称,符合需求 - 自带输入合法性校验:支持校验空输入、非数字输入、超出范围的编号输入,避免脚本异常
- 选中文件后会自动存储选中文件的无后缀名和完整路径,可直接在
SUBMENU标签下添加对应文件的操作逻辑
内容的提问来源于stack exchange,提问作者Murray
相关产品推荐
相关产品推荐

