我正在创建一个批处理文件,该文件将在我登录用户帐户时启动。我跟着this tutorial创建了一个包含菜单的批处理文件。但是,如果用户输入未列出的号码,我会希望它返回菜单。我该如何实现呢?
旁注:我知道我可以使用像Powershell这样更灵活的东西,但是,我更喜欢批处理文件。
这是我到目前为止所做的:
@ECHO OFF
CLS
:MENU
echo Welcome %USERNAME%
echo 1 - Start KeePass
echo 2 - Backup
echo 3 - Exit
SET /P M=Type 1,2,3 then press Enter:
IF %M%==1 GOTO StarKeePass
IF %M%==2 GOTO Backup
IF %M%==3 GOTO :EOF
:StarKeePass
SET keePass="%USERPROFILE%\KeePass\KeePass-2.30\KeePass.exe"
SET kdb="%USERPROFILE%\KeePass\PasswordDatabase\PasswordDatabase.kdbx"
echo I'll start KeePass for You
START "" %keePass% %kdb%
GOTO MENU
:Backup
SET backup="%USERPROFILE%\backup.bat"
call %backup%
GOTO MENU
答案 0 :(得分:0)
要使用set /P
制作菜单,我建议您进行以下更改:
if
次查询之后,添加goto :MENU
以捕获意外的条目; set "SELECT="
命令之前用set /P
之类的东西重置选择变量,因为set /P
保留变量的前值,以防用户只按 ENTER ""
语句中的表达式周围加上引号if
,以避免在变量为空或包含一些具有特殊含义的字符时出现语法错误(^
{{1} } &
(
)
<
>
; |
字符仍会导致问题; "
来避免使用特殊字符时出现问题; set [/P] "SELECT=anything"
开关添加到/I
以强制进行不区分大小写的比较; if
标签后面添加cls
命令,以便每次返回菜单时都可以建立屏幕; 这是一个演示我正在谈论的内容的例子:
:MENU
为避免上述@echo off
:MENU
cls
echo --- MAIN MENU ---
echo 1 - do something
echo 2 - do something else
echo Q - quit
set "SELECT="
set /P "SELECT=Type 1, 2, or Q <Enter>: "
if "%SELECT%"=="1" GOTO :SOMEWHERE
if "%SELECT%"=="2" GOTO :SOMEWHERE_ELSE
if /I "%SELECT%"=="Q" GOTO :EOF
goto :MENU
:SOMEWHERE
rem do something here...
echo.
echo Print some text.
pause
goto :MENU
:SOMEWHERE_ELSE
rem do something else here...
echo.
echo Print some other text.
pause
goto :MENU
字符的问题,请修改"
块,如下所示:
set /P