最近我做了一个帖子,我问过,如何创建,或者是否可以批量创建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
编辑,好的,我想我需要问丹尼斯本人,因为那是 他的代码^ _ ^。谢谢大家的时间。我不知道是不是这个 线程应该关闭,因为问题没有得到答复,但是这个 问题可能在此刻的页面底部,所以我会问 主持人关闭此主题。
再一次,谢谢你们:) 此致
答案 0 :(得分:0)
我会建议您使用 DOS Batch - Menus
这样的简单菜单说明:
这个简单的菜单框架解析某些签名的批处理标签,并将它们列为菜单项。自解析功能使菜单通用。可以通过添加新功能块插入新菜单项,而无需更改菜单基础结构。
功能:
@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