Member 12787419 Ответов: 4

Cmd пропускает if-оператор?


Мне было скучно, поэтому я попытался создать виртуальную консоль внутри CMD, и она, похоже, работает нормально до тех пор, пока не будет проверен ввод и не будет выполнена соответствующая команда.

Я получаю экран с надписью ":", и там вы можете ввести ту команду, которую хотите выполнить, и набор текста работает нормально, но когда он идет проверять, какую команду Выполнить, возникают проблемы.

Проблема в том, что если я набираю "register", который должен перейти к метке под названием :reg, я выполняю команду "exit", которая должна выполняться только тогда, когда я набираю "exit".

Вот мой сценарий:

echo off
cls

:console
title Command prompt
cls
set /p c=": "

if "%c%"=="exit"
(
exit
)

if "%c%"=="register"
(

goto :reg

)


:reg
title Register a new account
cls
echo Registration
echo.

set /p newName="Username: "
set /p newPass="Password: "
cls
echo Processing...
>nul timeout /t 3
goto console


Что я уже пробовал:

Я пытался изменить порядок команд и операторов if, но оказалось, что первая команда всегда выполняется независимо от того, что вы вводите.

4 Ответов

Рейтинг:
2

Michael_Davies

Попробуйте это, застрявшие паузы и эхо, чтобы проверить:

cls
 
:console
title Command prompt
cls
set /p c=": "
echo %c%
pause

if "%c%"=="exit" goto end
 
if "%c%"=="register" goto reg

pause 

:reg
title Register a new account
cls
echo Registration
echo.
 
set /p newName="Username: "
set /p newPass="Password: "
cls
echo Processing...
>nul timeout /t 3
goto console
:end


Рейтинг:
2

Member 12641199

Удалите кавычки из всего, и нет никакой необходимости в тормозах

echo off
cls
 
:console
title Command prompt
cls
set /p c=: 
 
if %c%==exit exit
 
if %c%==register goto :reg

 
:reg
title Register a new account
cls
echo Registration
echo.
 
set /p newName="Username: "
set /p newPass="Password: "
cls
echo Processing...
>nul timeout /t 3
goto console


Рейтинг:
1

Patrice T

Где ты это подцепил if это многоканальная линия ? и с () ?
Вот ссылка на синтаксис:
Более мощные пакетные файлы-ветвление с помощью операторов "If" [^]

Список и ссылка командной строки |оболочки Windows[^]


Рейтинг:
1

Richard MacCutchan

if "%c%"=="register"
(
goto :reg 
)

:reg

Вижу ничего в этом плохого нет? Если пользователь не наберет exit, то все остальное попадет в метку :reg. Превратите ваши подпрограммы в правильные подпрограммы с помощью call нет goto.