[英]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.