Multiple choices menu on batch file?

后端 未结 13 1652
盖世英雄少女心
盖世英雄少女心 2020-11-28 12:56

Hi I want to make a batch file menu, that asks \'Select app you want to install?\' for example

  1. App1
  2. App2
  3. App3
  4. App4
  5. App5
13条回答
  •  一整个雨季
    2020-11-28 13:34

    Answer

    This will do what you want. Let me know if you have any questions. All you have to do is follow the two steps listed in the script.

    Script

    :: Hide Command and Set Scope
    @echo off
    setlocal EnableExtensions
    
    :: Customize Window
    title My Menu
    
    :: Menu Options
    :: Specify as many as you want, but they must be sequential from 1 with no gaps
    :: Step 1. List the Application Names
    set "App[1]=One"
    set "App[2]=Two"
    set "App[3]=Three"
    set "App[4]=Four"
    set "App[5]=Five"
    set "App[6]=All Apps"
    
    :: Display the Menu
    set "Message="
    :Menu
    cls
    echo.%Message%
    echo.
    echo.  Menu Title
    echo.
    set "x=0"
    :MenuLoop
    set /a "x+=1"
    if defined App[%x%] (
        call echo   %x%. %%App[%x%]%%
        goto MenuLoop
    )
    echo.
    
    :: Prompt User for Choice
    :Prompt
    set "Input="
    set /p "Input=Select what app:"
    
    :: Validate Input [Remove Special Characters]
    if not defined Input goto Prompt
    set "Input=%Input:"=%"
    set "Input=%Input:^=%"
    set "Input=%Input:<=%"
    set "Input=%Input:>=%"
    set "Input=%Input:&=%"
    set "Input=%Input:|=%"
    set "Input=%Input:(=%"
    set "Input=%Input:)=%"
    :: Equals are not allowed in variable names
    set "Input=%Input:^==%"
    call :Validate %Input%
    
    :: Process Input
    call :Process %Input%
    goto End
    
    
    :Validate
    set "Next=%2"
    if not defined App[%1] (
        set "Message=Invalid Input: %1"
        goto Menu
    )
    if defined Next shift & goto Validate
    goto :eof
    
    
    :Process
    set "Next=%2"
    call set "App=%%App[%1]%%"
    
    :: Run Installations
    :: Specify all of the installations for each app.
    :: Step 2. Match on the application names and perform the installation for each
    if "%App%" EQU "One" echo Run Install for App One here
    if "%App%" EQU "Two" echo Run Install for App Two here
    if "%App%" EQU "Three" echo Run Install for App Three here
    if "%App%" EQU "Four" echo Run Install for App Four here
    if "%App%" EQU "Five" echo Run Install for App Five here
    if "%App%" EQU "All Apps" (
        echo Run Install for All Apps here
    )
    
    :: Prevent the command from being processed twice if listed twice.
    set "App[%1]="
    if defined Next shift & goto Process
    goto :eof
    
    
    :End
    endlocal
    pause >nul
    

提交回复
热议问题