批量选择菜单?

时间:2014-11-24 03:49:45

标签: windows batch-file menu selection

是否可以使用批处理脚本要求用户(在CMD内)选择当前PC是主机还是客户端? 用户使用向上或向下键盘箭头选择一个选项,然后按Enter键进行确认。

我做了一点谷歌搜索,但我只能找到输入选择号码的代码。

1 个答案:

答案 0 :(得分:4)

没有第三方程序的帮助,批处理文件无法读取光标控制键。但是,您可以通过此过程使用基于DOSKEY命令的有趣技巧:

  1. 清除之前的DOSKEY历史记录。
  2. 执行几个读取菜单选项的SET / P命令,因此DOSKEY历史记录将被填充。
  3. 将F7键发送到键盘。
  4. 执行SET / P" OPTION =提示:&#34 ;;该命令的输入将通过DOSKEY的选择菜单完成。
  5. 虽然这种方法需要JScript编程语言的帮助,但它包含在XP上的所有Windows版本中。将以下代码复制并粘贴为批处理.BAT文件:

    @if (@CodeSection == @Batch) @then
    
    
    @echo off
    setlocal EnableDelayedExpansion
    
    rem Multi-line menu with options selection via DOSKEY
    rem Antonio Perez Ayala
    
    rem Define the options
    set numOpts=0
    for %%a in (First Second Third Fourth Fifth) do (
       set /A numOpts+=1
       set "option[!numOpts!]=%%a Option"
    )
    set /A numOpts+=1
    set "option[!numOpts!]=exit"
    
    rem Clear previous doskey history
    doskey /REINSTALL
    rem Fill doskey history with menu options
    cscript //nologo /E:JScript "%~F0" EnterOpts
    for /L %%i in (1,1,%numOpts%) do set /P "var="
    
    :nextOpt
    cls
    echo MULTI-LINE MENU WITH OPTIONS SELECTION
    echo/
    rem Send a F7 key to open the selection menu
    cscript //nologo /E:JScript "%~F0"
    set /P "var=Select the desired option: "
    echo/
    if "%var%" equ "exit" goto :EOF
    echo Option selected: "%var%"
    pause
    goto nextOpt
    
    
    @end
    
    var wshShell = WScript.CreateObject("WScript.Shell"),
        envVar = wshShell.Environment("Process"),
        numOpts = parseInt(envVar("numOpts"));
    
    if ( WScript.Arguments.Length ) {
       // Enter menu options
       for ( var i=1; i <= numOpts; i++ ) {
          wshShell.SendKeys(envVar("option["+i+"]")+"{ENTER}");
       }
    } else {
       // Enter a F7 to open the menu
       wshShell.SendKeys("{F7}{HOME}");
    }
    

    上一个程序的输出示例:

    Output example of previous program

    this post的进一步详情。