Показать полную графическую версию : Составить скрипт с условием
при проверке введеного значения использовать if defined: »
Интересно... Как сделать, чтобы вводились и обрабатывались только цифры 1,2,3. При вводе других цифр действие не происходило.
Set /p choice=Ваш выбор:
if "%choice%"=="1" (ping 127.0.0.1 -n 3 > nul &start Inst.cmd &&goto n2)
if "%choice%"=="2" (ping 127.0.0.1 -n 3 > nul &&goto n3)
if "%choice%"=="3" (ping 127.0.0.1 -n 3 > nul &&goto n2)
Как сделать, чтобы вводились и обрабатывались только цифры 1,2,3. При вводе других цифр действие не происходило. »
Например, так:
:Again
Set /p choice=Ваш выбор (1,2,3, …, 0 - отказ от выбора):
if "%choice%"=="1" (ping 127.0.0.1 -n 3 > nul &start Inst.cmd &&goto n2)
if "%choice%"=="2" (ping 127.0.0.1 -n 3 > nul &&goto n3)
if "%choice%"=="3" (ping 127.0.0.1 -n 3 > nul &&goto n2)
…
if "%choice%"=="0" goto :Out
echo Введено неверное значение
goto :Again
:Out
Если же это не учитывать, то вместо кучи if'ов проще использовать такую конструкцию:
Set /p choice=Ваш выбор:
goto :n%choice%
И, далее, в Вашем случае, наподобие:
:n1
start Inst.cmd
:n2
…
goto :Out
:n3
…
goto :Out
…
:Out
Или же
call :n%choice%
Foreigner
13-07-2011, 06:29
Iska,
Если просто нажать Enter без значения, то получим ошибку. Поэтому либо сразу определить переменную, либо проверять if defined:
set "choice=fake"
:Again
....
:Out
:Again
Set /p choice=Ваш выбор (1,2,3, …, 0 - отказ от выбора):
if defined choice (
...
)
:Out
Foreigner, я не понял, как определять каждую переменную. Помогите с написанием скрипта.
Foreigner
13-07-2011, 10:17
@echo off
setlocal
:choice
set /p choice="Enter: "
if not defined choice goto:choice
if "%choice%"=="1" goto:1
if "%choice%"=="2" goto:2
if "%choice%"=="3" goto:3
goto:choice
:1
echo 1
goto:eof
:2
echo 2
goto:eof
:3
echo 3
Iska, Если просто нажать Enter без значения, то получим ошибку. Поэтому … либо проверять if defined: »
Угу, надо. Забыл :).
Подскажите, почему при нажатии цифры 1 скрипт работает как надо, при нажатии цифр 2 или 3 появляется надпись "Не правильно сделан выбор задания" вместо нужных переходов.
:m1
echo.
Set /p choice="Ваш выбор: "
if not defined choice goto m1
if "%choice%"=="1" (ping 127.0.0.1 -n 3 > nul &start Inst.cmd &&goto m3) else (Echo Не правильно сделан выбор задания &goto m1)
if "%choice%"=="2" (ping 127.0.0.1 -n 3 > nul &goto k) else (Echo Не правильно сделан выбор задания &goto m1)
if "%choice%"=="3" (ping 127.0.0.1 -n 3 > nul &&goto m3) else (Echo Не правильно сделан выбор задания &goto m1)
:k
....
:m3
...
Похоже поторопился с вопросом, решил :)
:m1
echo.
Set /p choice="Ваш выбор: "
if not defined choice goto m1
if "%choice%"=="1" (ping 127.0.0.1 -n 3 > nul &start Inst.cmd &&goto m3) else (
if "%choice%"=="2" (ping 127.0.0.1 -n 3 > nul &goto k) else (
if "%choice%"=="3" (ping 127.0.0.1 -n 3 > nul &&goto m3) else (Echo Не правильно сделан выбор задания &goto m1)
))
:k
....
:m3
...
Foreigner
14-07-2011, 23:59
sov44,
A зачем столько вложенных if-else?
:m1
echo.
Set /p choice="Ваш выбор: "
if not defined choice goto m1
if "%choice%"=="1" ping 127.0.0.1 -n 3 > nul && start Inst.cmd && goto m3
if "%choice%"=="2" ping 127.0.0.1 -n 3 && goto k
if "%choice%"=="3" ping 127.0.0.1 -n 3 > nul && goto m3
Echo Не правильно сделан выбор задания
goto m1
:k
....
:m3
...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.