Войти

Показать полную графическую версию : [решено] Переход не на ту метку в пакетном файле


epoddubniy
08-10-2021, 12:48
Здравствуйте. В зависимости от имени введенной переменной в пакетном файле, необходимо, чтобы интерпретатор переходил на ту или иную метку.
Но почему-то не переходит.
Помогите пожалуйста разобраться

echo vvedi skip, esli ne nuzhno menyat ip ili go, esli nuzhno
set /p NextStep=

if "%NextStep%" neq "go" call :skip
call :go

:go
chcp 1251
ipconfig
netsh interface show interface
set /p "interface="
set /p "ipstatic="
set /p "mask="
set /p "gateway="
set /p "dns="
call "1.5 ChangeIPMaual2" %interface% %ipstatic%
netsh interface ip set address name="%interface%" static %ipstatic% %mask% %gateway%
netsh interface ip set dns "%interface%" static %dns%
netsh interface ip add dns "%interface%" 0.0.0.0
echo ESLI NAZHMESH KNOPKU IP AUTO BUDET POLUCHEN
pause
netsh interface ip set address "%interface%" dhcp
netsh interface ipv4 set dns name="%interface%" dhcp
ncpa.cpl
pause
exit /b


:skip
echo konec
exit /b

вне зависимости от значения переменной NextStep переходит на метку :go

wasp14
08-10-2021, 13:14
echo vvedi skip, esli ne nuzhno menyat ip ili go, esli nuzhno
set /p NextStep=

if %NextStep%==go goto :go
goto :skip
exit

:go
chcp 1251
echo GOOOOOooooooooooooooo
pause
exit /b

:skip
echo Выход
pause
exit

wasp14
08-10-2021, 13:31
А лучше choice заюзать ...↓

@echo off
chcp 65001
echo ^--------------------------------------------------------
echo ^ g - Изменить IP
echo ^ Q - Выход
echo ^---------------- timeout 30s exit ----------------------
CHOICE /C GQ /D Q /T 30

if /i %ERRORLEVEL% GEQ 3 (goto :EOF) else (goto :choice%ERRORLEVEL%)
:choice1
goto :go
pause & exit
:choice2
goto :skip
exit


:go
........................................

megaloman
08-10-2021, 14:55
Но почему-то не переходит. >Что написали, то и получили. Включите формализм:
if "%NextStep%" neq "go" call :skip
Если условие выполняетя, вызываем процедуру "skip", она выполняется, затем управление передаётся на следующую строку кода за этим If. (Вы использовали Call а не GoTo. Читайте Call /?)
Если условие не выполняется, делаем следующую строку кoда:
call :go
Процедура выполнится, и опять, возврат на следующую строку кода:
:go
и далее по тексту кода.
Повторно выполнится кусок кода от :go до exit.
как минимум, перед :go надо Exit
Можно нарисовать вот так:
@Echo Off
cls
echo vvedi skip, esli ne nuzhno menyat ip ili go, esli nuzhno
set /p NextStep=

if /I "%NextStep%" neq "go" (call :skip) else (call :go)
Exit /B
Но смысла набирать именно "skip" никакого: это значение нигде не контролируется.
@Echo Off
cls
echo vvedi go, esli nuzhno menyat ip
set /p NextStep=

if /I "%NextStep%"=="go" (call :go) else (Echo konec)
Exit /B
А по минимуму изменить Ваш код:@Echo Off
cls
echo vvedi skip, esli ne nuzhno menyat ip ili go, esli nuzhno
set /p NextStep=

if "%NextStep%" neq "go" GoTo :skip
:go
.........................
.........................




© OSzone.net 2001-2012