Пакетная программа пропускает блоки GOTO - PullRequest
0 голосов
/ 06 мая 2019

Я пишу что-то в BATCH, и мне нужно использовать GOTO, но вместо того, чтобы перейти к правильному GOTO, он идет к следующему ярлыку / классу, а не к правильному.

Я пытался использовать его без двоеточия, но до сих пор не могу найти решение.

@echo off 
title Nexus Generator
color 0a 
goto :signin  

:signin
echo =====================================
echo Welcome to NEXUS GENERATOR!
echo Please enter your KEY!
echo =====================================
set /p id="Enter Key: "
if %id% == "Test" then goto :signedin else goto :error

:error
echo uh lol

:signedin
cls
echo lol
pause >nul

Я ожидаю, что при вводе TEST он войдет в подпись, а при вводе чего-либо еще произойдет ошибка.

Ответы [ 2 ]

1 голос
/ 06 мая 2019
  • Вам также нужно сравнить некоторые "в кавычках" с некоторыми "в кавычках",

  • goto: место, где следует избегать выполнения следующей строки, напримерgoto: eof

@echo off 

color 0a
title Nexus Generator

echo/=====================================
echo/Welcome to NEXUS GENERATOR^!
echo/Please enter your KEY^!
echo/=====================================

set /p "id=Enter Key: "
if /i "%id%" == "test" goto :signedin

:error
echo/uh lol
goto :eof

:signedin
cls 
echo/lol 
pause >nul

в одной короткой версии:

@echo off & color 0a 
title Nexus Generator
echo/=====================================
echo/Welcome to NEXUS GENERATOR^!
echo/Please enter your KEY^!
echo/=====================================
set /p "id=Enter Key: "
echo/%id%|findstr /lic:"test" 2>nul && goto :signedin
:error
echo/uh lol & goto :eof
:signedin
cls & echo/lol & pause >nul
0 голосов
/ 06 мая 2019

Учитывая, что у вас есть только 2 результата, которые вы хотите goto, я бы сказал, что вам не нужен оператор else, поскольку goto будет происходить только при совпадении с оператором if, иначе он просто провалится вОшибка.Однако нам нужно проверить каждую сторону оператора на равенство.В данный момент вы тестируете Test == "Test".Обратите внимание, что один указан в кавычках, а другой нет, и вы хотите получить точное совпадение, поэтому вам нужно заключить в кавычки вашу переменную."%id%"=="Test":

@echo off 
title Nexus Generator
color 0a 
goto :signin  

:signin
echo =====================================
echo Welcome to NEXUS GENERATOR!
echo Please enter your KEY!
echo =====================================
set /p id="Enter Key: "
if /i "%id%" == "Test" goto :signedin

echo Oops, you entered "%id%" instead of "Test"
goto :eof

:signedin
cls
echo You're now signed in!!
pause >nul

Тем не менее, я предпочитаю не использовать операторы goto, если в этом нет полной необходимости, поэтому мы можем просто запускать блоки кода после операторов if и else:

@echo off 
title Nexus Generator
color 0a 
goto :signin  

:signin
echo =====================================
echo Welcome to NEXUS GENERATOR!
echo Please enter your KEY!
echo =====================================
set /p id="Enter Key: "
if /i "%id%" == "Test" (
      cls
      echo You're now signed in!!
  ) else (
      cls
      echo Oops, you entered "%id%" instead of "Test"
)
pause >nul
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...