Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/48: Рейтинг темы: голосов - 48, средняя оценка - 4.88
HOST_ERROR
194 / 33 / 3
Регистрация: 12.05.2010
Сообщений: 361
1

Досрочный выход из цикла с FOR

28.07.2011, 01:17. Просмотров 9864. Ответов 7
Метки нет (Все метки)

Нужно досрочно закончить операцию FOR в батнике при выполнение определённого условия.
К элементарному примеру:
for /l %%a in (1,1,100000) do (
if "%%a"=="1000" ?.?.? (команда завершения for)
)

Нужно чтобы Команда for прекратилась в момент достижения переменной %a значения 1000 (по условию), а не продолжала досчитывать до безграничной цифры.

Как можно поместить Cntrl+C в батник или каким способом можно завершить выполнение for досрочно ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 01:17
Ответы с готовыми решениями:

Выход из цикла
Всем добрый день. Пишу простую программку, которая требует от пользователя ввод...

Выход из цикла и продолжение выполнения
Доброго времени суток. Нужно продолжить выполнение после выхода из цикла....

Выход из цикла после выполнения определённого количества итераций
:x start "" "URL" goto x Как сделать, что б цыкл был не вечный, а...

Досрочный выход из цикла с параметром
Скажите пожалуйста, возможен ли досрочный выход из цикла с параметром при не...

Досрочный выход с For....Next
Kak do srochno vijti iz For....Next?

7
atributz
831 / 345 / 12
Регистрация: 04.10.2009
Сообщений: 589
28.07.2011, 18:19 2
работает только вариант с вызовом функции в цикле
правда он тоже не совсем корректен
Windows Batch file
1
2
3
4
5
6
7
8
goto start
:f1
if %1==1000 goto m1
exit /b
:start
for /l %%a in (1,1,100000) do (call :f1 %%a)
:m1
pause
а казалось бы простой однострочный
Windows Batch file
1
for /l %%a in (1,1,100000) do (if "%%a"==1000 goto :m1)
не работает
1
HOST_ERROR
194 / 33 / 3
Регистрация: 12.05.2010
Сообщений: 361
30.07.2011, 01:47  [ТС] 3
Вариант не подходит, ибо функция исполняется в самом цикле FOR, то есть
Windows Batch file
1
2
3
4
5
6
7
8
goto start
:f1
if %1==1000 goto m1
exit /b
:start
for /l %%a in (1,1,100000) do (call :f1 %%a)
:m1
pause
Тоже самое что

Windows Batch file
1
for /l %%a in (1,1,100000) do (if "%%a"=="1000" pause)
Тема еще актуальна.
0
Somebody
2808 / 1619 / 251
Регистрация: 03.12.2007
Сообщений: 4,223
Завершенные тесты: 3
30.07.2011, 23:46 4
Код
for /l %%a in (1,1,100000) do (
  echo %%a
  if %%a==1000 goto :m1
) 
:m1
Тело цикла выводится в командную строку (при echo on) 100000 раз, но echo %%a срабатывает 1000 раз! Ни фига не понятно, но это так.
0
HOST_ERROR
194 / 33 / 3
Регистрация: 12.05.2010
Сообщений: 361
31.07.2011, 01:52  [ТС] 5
Это не решает, просто когда echo off на процессор ложиться только вычисление и процес идёт очень быстро, если echo on то на процессор идёт нагрузка вывода данных в окно и счёт идёт в 10000 раз медленее чем в echo off.

Толко вот в чём загвоздка в твоём примере, что после исполнения команды goto :bla-bla-bla команды за ним и в следующих циклах просто игнорируются, но при этом For досчитывает свой милиард баксов до конца.
0
atributz
831 / 345 / 12
Регистрация: 04.10.2009
Сообщений: 589
31.07.2011, 13:34 6
еще один костыльный вариант
файл 1.bat
Windows Batch file
1
for /l %%i in (1,1,100000) do (if %%i==100 exit))
файл 2.bat
Windows Batch file
1
2
start "" 1.bat
pause
В самом деле разработчики видимо вообще не предусматривали возможность нормального прерывания жеско заданного цикла. В bat вообще много что криво сделано чего уж вы еще хотите?
0
Ris
791 / 173 / 9
Регистрация: 11.01.2011
Сообщений: 543
08.08.2011, 01:43 7
прерывания да, а выход - это, что-то типа:
Bash
1
for /l %%a in (1,1,1010) do (if %%a==1000 goto :EOF)
1
NAWARRO
7 / 7 / 1
Регистрация: 07.09.2013
Сообщений: 44
11.09.2015, 17:24 8
Забыли, что есть классическое решение досрочного выхода из цикла, при помощи счетчика. По такому принципу, самописные пингеры работают:

Windows Batch file
1
2
3
4
5
6
7
8
9
setlocal enableextensions enabledelayedexpansion
set /a err=0
for /l %%a in (1,1,100000) do call:CompWork %%a
:m
endlocal
exit
:CompWork
set /a err=%err%+1
if %err% EQU 100 goto m
0
11.09.2015, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2015, 17:24

Досрочный выход
Всем привет!:) Как можно досрочно выйти(закончить выполнять программу) В...

Организовать досрочный выход
Прошу помочь организовать досрочный выход в программах Pascal Program ololo;...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru