批处理文件到循环菜单

时间:2015-12-14 17:09:20

标签: windows batch-file cmd

我正在创建一个批处理文件,该文件将在我登录用户帐户时启动。我跟着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

1 个答案:

答案 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