Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / Обрыв цикла for - BAT / 5 сообщений из 5, страница 1 из 1
24.07.2015, 09:39
    #39015095
Volik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв цикла for - BAT
В моем примере я в цикле 10 раз запрашиваю у пользователя ввод параметра.
Если параметр введен неверно, то запрашиваю его на текущей итерации снова и снова, используя при этом метку.
Проблема в том, что переход к метке обрывает цикл, т.е. если ввести сразу неверный параметр, а потом - верный (0, 1 или 2), то цикл заканчивается.
Можно как-то избежать этого?

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
echo off
cls
SETLOCAL ENABLEDELAYEDEXPANSION
  
FOR /L %%i IN (0,1,10) DO (
 
  :NEEDCOPY
  set /P isCopy="Need copy? (0-no, 1-yes, 2-break): "
  if not "!isCopy!" == "0" (
    if not "!isCopy!" == "1" (
      if not "!isCopy!" == "2" (
        goto NEEDCOPY
      )
    )
  )
)
 
pause
...
Рейтинг: 0 / 0
24.07.2015, 11:33
    #39015208
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв цикла for - BAT
Volik,

А так?

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
echo off
cls
SETLOCAL ENABLEDELAYEDEXPANSION
  
FOR /L %%i IN (0,1,10) DO (
 
  :NEEDCOPY
  set /P isCopy="Need copy? (0-no, 1-yes, 2-break): "

  set p=0;
  if "!isCopy!" == "0" set p=1
  if "!isCopy!" == "1" set p=1
  if "!isCopy!" == "2" set p=1  

  if not "!p!" == "1" goto NEEDCOPY
) 
pause
...
Рейтинг: 0 / 0
24.07.2015, 11:56
    #39015261
Volik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв цикла for - BAT
Обрывается.
Еще если в вашем примере ввести, например, 1, затем 2, затем снова 1, то тоже обрывается.
...
Рейтинг: 0 / 0
24.07.2015, 15:42
    #39015568
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв цикла for - BAT
Volik,

Можно так попробовать (разбить цикл и собсно ввод):

1.cmd:
~~~~~~~~~~~~~
Код: powershell
1.
2.
3.
4.
5.
6.
echo off
cls
SETLOCAL ENABLEDELAYEDEXPANSION
  
FOR /L %%i IN (0,1,10) DO (call 2.cmd %%i)
pause


2.cmd
~~~~~~~~~~~~~
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
echo %1
:NEEDCOPY
  set /P isCopy="Need copy? (0-no, 1-yes, 2-break): "
  set p=0;
  if "!isCopy!" == "0" set p=1
  if "!isCopy!" == "1" set p=1
  if "!isCopy!" == "2" set p=1  
  if not "!p!" == "1" goto NEEDCOPY
exit /b
...
Рейтинг: 0 / 0
25.07.2015, 12:51
    #39015944
Volik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрыв цикла for - BAT
Спасибо, вариант рабочий.
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / Обрыв цикла for - BAT / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]