簡體   English   中英

批處理文件到循環菜單

[英]Batch File To Loop Menu

我正在創建一個批處理文件,該文件將在登錄用戶帳戶時啟動。 我按照本教程創建了帶有菜單的批處理文件。 它有效,但是,如果用戶輸入的號碼未列出,我希望它返回菜單。 我將如何實施?

旁注:我知道我可以使用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

要使用set /P構建菜單,我建議進行以下更改:

  • 在所有if查詢之后,放入goto :MENU捕獲意外條目;
  • set /P命令之前通過set "SELECT="重置選擇變量,因為set /P保留變量的前一個值,以防用戶僅按ENTER鍵
  • 把引號""周圍的表述中if語句,以避免語法錯誤的情況下,該變量為空或包含一些字符有特殊的含義( ^ & ( ) < > | ;在"角色仍有問題雖然);
  • 使用引用的語法set [/P] "SELECT=anything"來避免特殊字符的麻煩;
  • 如果查詢字母,則將/I開關添加到if以強制不區分大小寫的比較;
  • 如果願意,可以在:MENU標簽后面放置一個cls命令,以便每次返回菜單時都可以建立屏幕。

這是一個演示我在說什么的示例:

@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塊:

set "SELECT=""
set /P "SELECT=Type 1, 2, or Q <Enter>: "
set "SELECT=%SELECT:"=%"
if "%SELECT%"=="1" GOTO :SOMEWHERE
if "%SELECT%"=="2" GOTO :SOMEWHERE_ELSE
if /I "%SELECT%"=="Q" GOTO :EOF
goto :MENU

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM