【问题标题】:How to troubleshooot Windows choice loop?如何解决 Windows 选择循环问题?
【发布时间】:2019-01-09 16:57:41
【问题描述】:
setlocal EnableDelayedExpansion
:adapterloopstart
echo.
echo please enter the type of adapter you would like to create
echo 1. Host-Only
echo 2. Internal
echo.

set ADAPTYPE=
choice /C:12
if ERRORLEVEL 2 set ADAPTYPE=intnet
goto adapterconfirm
if ERRORLEVEL 1 set ADAPTYPE=hostonly
goto adapterconfirm
REM If you got here, it wasn't 1, 2
goto adapterloopstart
echo %ADAPTYPE%

:adapterconfirm
echo %ADAPTYPE%
set confirmadapter=
set /p confirmadapter=Do you wish to create a "%ADAPTYPE%" network (y,n):
if not '%confirmadapter%'=='' set confirmadapter=%confirmadapter:~0,1%
if '%confirmadapter%'=='y' goto adapterend
if '%confirmadapter%'=='n' goto adapterloopstart
ECHO "%choice%" is not valid, try again
:adapterend

上面的代码给出了以下字符串:

你想创建一个“”网络(y,n):

它不显示变量。

我该如何解决这个问题,以便我知道它以正确的选择保存了变量,以便我以后希望重新运行此代码以便获得关于正在发生的事情的反馈?

【问题讨论】:

  • 您不应该在最后一个ECHO 命令中使用变量confirmadapter 吗?您永远不会设置名为choice 的变量。此外,检查 errorlevel 是否为 1 的命令将永远不会运行,因为您之前有一个 GOTO。选择命令也只允许您输入选择选项之一。您不需要 goto 命令即可返回到适配器循环开始。
  • 不知道为什么你会选择一个输入而不是另一个。选择命令是 YES/NO 问题的完美解决方案。

标签: loops batch-file variables if-statement


【解决方案1】:

我认为这会稍微简化您的逻辑。使用选择命令对您有利。

@echo off
:adapterloopstart
cls
echo.
echo Please enter the type of adapter you would like to create
echo 1. Host-Only
echo 2. Internal
echo.

set "ADAPTYPE="
choice /C:12
if ERRORLEVEL 1 set "ADAPTYPE=hostonly"
if ERRORLEVEL 2 set "ADAPTYPE=intnet"

choice /M "Do you wish to create a '%ADAPTYPE%' network:"

if errorlevel 2 goto adapterloopstart

:adapterend

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 2019-07-09
    • 2017-06-24
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多