zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    deepin15.7挂载/home到单独的分区:
    Docker配置整理
    Docker安装方法整理
    在ArangoDB中实现connectedcomponents算法
    Blazor入手教程(十一)使用组件库AntDesign Blazor
    Blazor入手教程(十)部署安装
    Blazor入手教程(九)c#和js互相调用
    Blazor入手教程(八)布局Layout
    Blazor入手教程(七)表单
    Blazor入手教程(六)组件的生命周期
  • 原文地址:https://www.cnblogs.com/ceblog/p/2077214.html
Copyright © 2011-2022 走看看