多选菜单

时间:2016-07-29 06:09:36

标签: batch-file

美好的一天!

最近我做了一个帖子,我问过,如何创建,或者是否可以批量创建Tickmenu。

其中一位回答的是 - Dennis van Gils,他慷慨地展示了他的多选菜单。

这是代码:

@echo off
setlocal EnableDelayedExpansion

set "getKeyMacro=powershell -noprofile "^
    while (-not (37..40+13).contains($x)) {^
        $x = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').VirtualKeyCode^
    }^
    if ($x -eq 13) {^
    'enter'^
    }^
    ('left','up','right','down')[$x - 37]^
""

set "num=0"
for %%a in ("7zip"
            "7zip x64"
            "AdobeReader"
            "Far x64"
            "Far x86") do (
   set /A num+=1
   set "option!num!=0"
   set "option!num!name=%%~a"
)
set "maxOptions=%num%"
set "selected=1"
:select
cls
echo use ^<right^> arrow to continue, ^<up^> and ^<down^> to select, and ^<enter^> to toggle
FOR /L %%G IN (1,1,%maxOptions%) DO (
set "display=[ ]"
if !option%%G! equ 1 set "display=[x]"
if %%G equ !selected! set "display=^>!display!"
echo !display! !option%%Gname!
)
FOR /F "delims==" %%G IN ('%getKeyMacro%') DO set "key=%%G"
if "%key%"=="up" set /a "selected-=1"
if "%key%"=="down" set /a "selected+=1"
if %selected% lss 1 set "selected=1"
if %selected% gtr %maxOptions% set "selected=!%maxOptions%!"
if "%key%"=="enter" goto toggle
if "%key%"=="right" goto OK
goto select

:toggle
set /a "option%selected%+=1"
set /a "option%selected%=!option%selected%!%%2"
goto select

:OK
FOR /L %%G IN (1,1,%maxOptions%) DO (
if !option%%G! equ 1 (
call :logic "%%G"
)
)
pause

goto :eof
:logic
 set "install=%~1"
 if "%install%"=="1" (
  msiexec /i D:\Install\Software\7z920.msi /quiet /qn 
  echo executing %install%
 )

 if "%install%"=="2" (
  msiexec /i D:\Install\Software\7z920x64.msi /quiet /qn 
  echo executing %install%
 )

 if "%install%"=="3" (
  Start "" "D:\Install\Software\AdbeRdr11010_en_US"
  echo executing %install%
 )

 if "%install%"=="4" (
  msiexec /i "D:\Install\Software\Far x64.msi" /quiet /qn 
  echo executing %install%
 )

 if "%install%"=="5" (
  msiexec /i "D:\Install\Software\Far x86.msi" /quiet /qn 
  echo executing %install%
 )

当他发布他的代码时,他指出,在:逻辑,我需要创建简单的If语句,以便脚本可以运行程序。

我做了那些If语句但由于某种原因脚本仍然给我意外错误。我是批处理脚本的新手,所以对我来说,很难理解这个普通的级别代码。

所以,我的问题是,为什么这段代码不起作用?

此致 Vairis

  编辑,好的,我想我需要问丹尼斯本人,因为那是   他的代码^ _ ^。谢谢大家的时间。我不知道是不是这个   线程应该关闭,因为问题没有得到答复,但是这个   问题可能在此刻的页面底部,所以我会问   主持人关闭此主题。

再一次,谢谢你们:) 此致

1 个答案:

答案 0 :(得分:0)

我会建议您使用 DOS Batch - Menus

这样的简单菜单

说明:

这个简单的菜单框架解析某些签名的批处理标签,并将它们列为菜单项。自解析功能使菜单通用。可以通过添加新功能块插入新菜单项,而无需更改菜单基础结构。

功能:

  1. 简单且结构良好
  2. 易于提升
  3. 易于维护
  4. @echo off
    Title Example of a dynamic menu
    Mode con cols=70 lines=13 & color 9E 
    :menuLOOP
    echo(
    echo(    =============================Menu==============================
    echo(
    for /f "tokens=2* delims=_ " %%A in ('"findstr /b /c:":menu_" "%~f0""') do echo                        %%A  %%B
    echo(
    echo(    ===============================================================
    set choice=
    echo( & set /p choice=Make a choice or hit ENTER to quit: || GOTO :EOF
    echo( & call :menu_[%choice%]
    GOTO:menuLOOP
    
    :menu_[1] Install 7zip (x86 bits)
    cls
    set "Install=Install 7zip (x32 bits)"
    rem msiexec /i D:\Install\Software\7z920.msi /quiet /qn 
    echo Executing %install%
    Timeout /T 30 /nobreak>nul
    GOTO:menuLOOP
    
    :menu_[2] Install 7zip (x64 bits)
    cls
    set "Install=Install 7zip (x64 bits)"
    rem msiexec /i D:\Install\Software\7z920x64.msi /quiet /qn 
    echo Executing %install%
    Timeout /T 30 /nobreak>nul
    GOTO:menuLOOP
    
    :menu_[3] Install Adobe Reader
    cls
    set "Install=Install Adobe Reader"
    rem Start "" "D:\Install\Software\AdbeRdr11010_en_US"
    echo Executing %install%
    Timeout /T 30 /nobreak>nul
    GOTO:menuLOOP
    
    :menu_[4] Far (x64)
    cls
    set "Install=Install Far (x64)"
    Rem msiexec /i "D:\Install\Software\Far x64.msi" /quiet /qn 
    echo Executing %install%
    Timeout /T 30 /nobreak>nul
    GOTO:menuLOOP
    
    :menu_[5] Far (x32)
    cls
    set "Install=Install Far (x32)"
    Rem msiexec /i "D:\Install\Software\Far x86.msi" /quiet /qn 
    echo Executing %install%
    Timeout /T 30 /nobreak>nul
    GOTO:menuLOOP