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

如何通过批处理读取目录指定后缀文件构建带编号可选菜单

批处理带子菜单选择指定目录文件解决方案

原代码问题梳理

  • 输入语句语法错误:接收用户输入的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:45:03