Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переход не на ту метку в пакетном файле (http://forum.oszone.net/showthread.php?t=349762)

epoddubniy 08-10-2021 12:48 2968302

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

Код:

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 2968304

Код:

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 2968305

А лучше 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 2968312

Цитата:

Цитата epoddubniy
Но почему-то не переходит. >

Что написали, то и получили. Включите формализм:
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
.........................
.........................



Время: 08:01.

Время: 08:01.
© OSzone.net 2001-