CMD 中的选择器出现问题,在用户键入条目后关闭

问题描述 投票:0回答:1

我正在开发一个脚本,其中我需要用户从列表中进行选择,该列表为他们提供他们想要使用的工具,并且根据此输入将他们带到代码的其他部分。然而,由于我对批处理语言不太了解,所以我询问了 ChatGPT 以及我在该网站上看到的类似项目,我尝试这样做。一般来说,问题是当用户键入数字并按 Enter 时,程序立即关闭。这是我的代码:

echo 1. Temporary Cleaning.
echo 2. Installation of Applications.
echo 3. Application Update.
echo 4. Exit
echo.
echo.

:digitnumber
set /p ntool= Enter the number of the tool you need:
set "vnumber=false"
set "nvalid= 1 2 3 4 "
for %%A in (%invalid%) do ( if "%ntool%"=="%%A" (
            set "vnumber=true"
            goto validnumber
        )
)

:validnumber
if "%vnumber%"=="true" (
   
    if "%ntool%"=="1" (
        echo You have selected option 1.

    ) else if "%ntool%"=="2" (
        echo You have selected option 2.
        
    ) else if "%ntool%"=="3" (
        echo You have selected option 3.
        
    ) else if "%ntool%"=="4" (
        echo You have selected option 4.
        
    )
) else (
    echo Invalid selection. Please select a valid option (1-4).
    goto enter number
)

pause

` 如果您能帮助我,我将非常感激。

我逐段运行代码,显然问题出在检查变量是否是有效数字之后。但我不知道该怎么办

windows batch-file cmd
1个回答
0
投票

您的代码有一些问题

我。您正在设置变量

nvalid
但在 for 循环中您正在使用
invalid

echo 1. Temporary Cleaning.
echo 2. Installation of Applications.
echo 3. Application Update.
echo 4. Exit
echo.
echo.

:digitnumber
set /p ntool= Enter the number of the tool you need:
set "vnumber=false"
set "nvalid= 1 2 3 4 "
for %%A in (%nvalid%) do ( if "%ntool%"=="%%A" (
            set "vnumber=true"
            goto validnumber
        )
)

:validnumber
if "%vnumber%"=="true" (
   
    if "%ntool%"=="1" (
        echo You have selected option 1.
        goto :endif
    )
    if "%ntool%"=="2" (
        echo You have selected option 2.
        goto :endif
    ) 
    
    if "%ntool%"=="3" (
        echo You have selected option 3.
        goto :endif
    ) 
    if "%ntool%"=="4" (
        echo You have selected option 4.        
        goto :endif
    )
) else (
    echo Invalid selection. Please select a valid option [1-4].
    goto :digitnumber
)

:endif
echo --END--

pause
© www.soinside.com 2019 - 2024. All rights reserved.