С кодом, который вы взяли, я не могу повторить ошибку, однако я помню, что сталкивался с той же самой проблемой очень давно.
Ответ - кавычки;просто добавьте его, и вы избежите более сложного кода:
:input
cls
set ans=:
set /p ans=
if "%ans%" equ "1" (
goto opt1
) else (
goto input
)
:opt1
echo success!
РЕДАКТИРОВАТЬ: Что касается первых ans , который был установлен , это для очистки памяти оболочки.Иногда переменная может храниться в памяти Windows, и даже если вы ничего не введете в переменную set / p и нажмете только return , пакет проверит переменную ион уже будет иметь значение, ранее установленное в памяти.Пример:
set /p option=
Пользовательский ввод "1".В результате Windows будет хранить option = 1 или % option% , что приведет к 1 .Таким образом, даже если вы ничего не вводите, следующий код будет двигаться вперед, так как ответ ранее сохранен в памяти:
set /p option=
Пользователь НЕ вводит ничего, только нажимает return .Код будет двигаться дальше:
if "%option%" equ "1" do (
echo %option% is equal to 1 because it was previously stored.
)
РЕДАКТИРОВАТЬ : Вот код с комментариями и пояснениями:
@echo off
:main_menu
cls
echo Welcome menu
echo.
echo 1 - option 1
echo 2 - option 2
echo 3 - option 3
echo.
rem Blank "ans" will clean the memory for a previous set value.
set ans=
rem You can either quote the whole variable with its option, ot not quote it at all.
rem However, its always better to quote it, as follows.
set /p "ans=select your option and then press enter:"
if "%ans%" == "1" goto opt1
if "%ans%" == "2" goto opt2
if "%ans%" == "3" goto opt3
rem The following line will force a loop to main menu if only return is pressed; blank options will not display message.
if "%ans%" == "" goto main_menu
rem In case that another option rather than 1, 2 or 3 are pressed, the loop will warn you, and then return to main menu.
echo "%ans%" is not a valid option, press any key to try again!
pause > nul
goto main_menu
:opt1
cls
echo this is option 1
pause
goto main_menu
:opt2
cls
echo this is option 2
pause
goto main_menu
:opt3
cls
echo this is option 3
pause
goto main_menu
Относительно %ans:~0,1%
, этоограничить строку определенной позицией.Так, например, %any_variable:~0,5%
говорит: «Начните строку с символа 0
и продолжайте до символа 5
».Вы можете попробовать это в следующем примере.Обратите внимание, что на всех echo
строках будет напечатан один и тот же текст:
@echo off
set example=Batch files are kinda cool
echo %example%
echo %example:~0,11% are kinda cool
echo Batch files %example:~12%
pause