Войти

Показать полную графическую версию : Составить скрипт с условием


Страниц : 1 [2]

sov44
12-07-2011, 22:55
при проверке введеного значения использовать 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)

Iska
13-07-2011, 01:02
Как сделать, чтобы вводились и обрабатывались только цифры 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

sov44
13-07-2011, 07:11
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
13-07-2011, 22:16
Iska, Если просто нажать Enter без значения, то получим ошибку. Поэтому … либо проверять if defined: »
Угу, надо. Забыл :).

sov44
14-07-2011, 21:26
Подскажите, почему при нажатии цифры 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