使用DOS命令实现选择菜单

为了方便大家使用一个脚本,决定将用户输入变成一个命令行式的菜单,这样用户直接选择即可。

原理比较简单,将指定目录下的所有子目录都列举出来,并编号。指示用户输入,如果用户输入为N,就跳过前面N行,读取一行数据。

就得到了我们想要的子目录名。

代码摘录如下:

PRODUCT_LIST为事先指定的需要列举的目录名。

在for循环中不停变化的变量在FOR循环中输出时需要做特殊处理,此段代码中为:@    cmd /V:ON/C   echo !COUNT!:   %%x

即cmd /V:ON /C,打开延缓环境变量扩展。同时取变量值时需要用!将变量括起来,而不是%

dirlist.txt是存放子目录列表的文件,也可以用一条指令:'dir /aD /on /b %PRODUCT_LIST%'来代替,但使用后者时skip指定行数时有错误。

假设skip 4行,实际跳过了8行。


@echo off
@cls

dir /aD /on /b %PRODUCT_LIST% >dirlist.txt

set /a COUNT=0

@for /f %%x in ( dirlist.txt ) do (

@    cmd /V:ON/C   echo !COUNT!:   %%x
@ set /a COUNT=COUNT+1

)
@ECHO 请输入产品名称,如M28,不输入则会遍历所有产品
@if "%PRODUCT_NAME%"=="" set /P PRODUCT_NAME=Please input Product name:

REM 如果用户没有选择,就遍历所有产品
@if "%PRODUCT_NAME%"=="" goto :ProductNameOK

set SELECT_NUM=%PRODUCT_NAME%

for /f "skip=%SELECT_NUM%" %%x in (dirlist.txt) do (

 call  :ProductNameSelected  %%x
 @REM I don't know how to break the FOR sentence, just use goto :eof to do this.
 goto :eof
)
echo Your input is error
goto :SelectProductName

REM this is a funtion.
:ProductNameSelected

 set PRODUCT_NAME=%1
 echo You selected: "%PRODUCT_NAME%"
 del /q dirlist.txt
 goto :ProductNameOK;

:ProductNameOK

转载于:https://www.cnblogs.com/ceblog/archive/2011/06/10/2077214.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值