Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
10 / 10 / 5
Регистрация: 12.01.2017
Сообщений: 387

Работа с двумя циклами с сохранением одного счётчика

15.12.2017, 20:23. Показов 1429. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть батник
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
setlocal enabledelayedexpansion
set var= 
set /a var=1
for /L %%i in (1,1,10) do (
:begin
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %%i execute --image "C:\Windows\test.bat" 
IF ERRORLEVEL 1 GOTO loop
echo count !var! 
set /a var+=1
)
exit
 
:loop
for /L %%i in (1,1,2) do (
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %%i execute --image "C:\Windows\test.bat"
IF ERRORLEVEL 0 GOTO begin
)
goto begin
Работает первый цикл со счётчиком от 1 до 10, направляющий исполнительные файлы в виртуальные машины %%i. Если с отправкой файла происходит ошибка, то идёт перенаправление во второй цикл от 1 до 2, где делаются две повторные попытки запуска. Если какая-то попытка завершилась успешно, то идёт возврат в первый цикл. Причём, если, к примеру, ошибка в цикле произошла на числовом порядке 4, то успешная команда должна вернуться в него, в 4-й, как исправленная, и первый цикл продолжается дальше. Если же во втором цикле (от 1 до 2) обе попытки выполнились с ошибкой, то эта ошибка должна направиться в текстовый файл с указанием номера, на котором произошла ошибка, то есть, если ошибка произошла на 4-м цикле, и не была исправлена, то в текстовый файл должна записаться цифра 4. При этом идёт возврат в первый цикл (1-10), но уже не на метку 4, а на следующую, 5. Прошу помочь с решением данного вопроса. Приветствуются другие варианты скриптов, выполняющих эту задачу. В указанном батнике не решены вопросы возврата цикла и перенаправления ошибочных в текстовый файл.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2017, 20:23
Ответы с готовыми решениями:

Различия между двумя циклами
объясните различия между двумя следующими циклами while #include <iostream> using namespace std; int main () { const...

Заполнение html - таблицы двумя циклами
Допустим есть два массива: 1. a = 2. b = Нужно генерить html - таблицу такого вида: |a|b| |1|4| |2|5| |3|6|

2 запроса в базу данных с двумя циклами
Всем привет, может заголовок не так сформулировал но в общем не могу понять. как мне вытащить переменную $members из цикла while($members...

8
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
15.12.2017, 23:23
sundraw,
какой-то такой бред написан, если честно.
запуск программы 10 раз подряд - это извращение или как? А потом при неудаче еще пару запусков вместо устранения проблемы (ошибки) или контроля и анализа

достаточно пустить при отсутствии ошибки и зациклить (в данном случае вручную через паузу, можно убрать) при ошибке до ее пропадания
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
set proba=Proba
echo %proba%|>nul find "Proba"
:: echo %proba%|>nul find "NoProba"
:povtor
if "%errorlevel%"=="0" (
 echo zapusk proga.exe& pause& exit
) else (
 echo pause& pause& goto povtor
)
pause
все это просто пример, шевелите извилинами
0
10 / 10 / 5
Регистрация: 12.01.2017
Сообщений: 387
16.12.2017, 05:40  [ТС]
alpap
Здесь не совсем бред, хотя Вы возможно, и правы. Подобный скрипт выполняет отправку (копирование) файлов, команд в виртуальные машины VirtualBox из хостовой машины. Здесь, например, происходит запуск одной команды "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %%i execute --image "C:\Windows\test.bat" в 10-ть разных виртуальных машин %%i, их может быть и 100, и 1000. Зачем это нужно. Некоторые виртуальные машины в процессе работы выходят из строя, подвисают, подхватывают вирусы, сбой команд и т.п. Некоторые виртуалки находятся в процессе перезагрузки, когда их дополнения Extension Pack ещё не подключились. Вот для таких машин и нужны 2-3 попытки через паузы (метка :loop), чтоб их дополнения успели подключиться и принять нужную команду в файле test.bat. Если же все эти попытки безуспешны, то это свидетельствует о неисправности самой виртуалки или её дополнений. Номера таких машин %%i выводятся в отдельный текстовый файл, после чего в течение 2-х минут эти вышедшие из строя машины меняются на новые. Вышеуказанный скрипт, кроме того, что выполняет свои прямые функции по отправке команд и копированию файлов , папок в саму виртуалку, ещё и выявляет неисправные машины, которые в ручном порядке выявлять намного дольше.
А за скрипт спасибо, попробую с ним поработать.
1
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
16.12.2017, 09:29
На другом форуме есть ответ. Но и здесь то же самое, на всякий случай:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal
set var=
for /l %%i in (1,1,10) do (
    set var=%%i
    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %%i execute --image "C:\Windows\RestartPC.bat" --username Admin --password 1 --recursive
    if errorlevel 1 (>>ErrorVM.txt echo.%date% %time%: Обнаружена ошибка запуска, машина N'%%i'&call :loop)
    echo.%date% %time%: Запуск контроля выполнен, машина: N'%%i'
)
pause&exit /b
 
:loop
 for /l %%a in (1,1,2) do (
    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %var% execute --image "C:\Windows\RestartPC.bat" --username Admin --password 1 --recursive
    if %errorlevel% equ 0 (>>ErrorVM.txt echo.%date% %time%: Исправлена ошибка на попытке N'%%a', машина N'%var%'&exit /b)
)
>>ErrorVM.txt echo.%date% %time%: Ошибка не исправлена, машина N'%var%'
exit /b
2
10 / 10 / 5
Регистрация: 12.01.2017
Сообщений: 387
16.12.2017, 10:26  [ТС]
YuS_2, на другом форуме мы пообщались. Скрипт работает отлично, даже больше моих ожиданий. Большое спасибо
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
16.12.2017, 12:56
Цитата Сообщение от YuS_2 Посмотреть сообщение
if errorlevel 1
может лучше не 0, не знаю могут ли быть другие кроме 1 ?

Добавлено через 1 минуту

Не по теме:

sundraw,
надо было вот так развернуто и писать задачу, не могут же все знать все утилиты и их команды

0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
16.12.2017, 13:32
Цитата Сообщение от alpap Посмотреть сообщение
может лучше не 0, не знаю могут ли быть другие кроме 1 ?
Там учтено, что могут быть другие коды:
if %errorlevel% equ 0 - ошибок нет
if errorlevel 1 - условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.

Не по теме:

Цитата Сообщение от alpap Посмотреть сообщение
надо было вот так развернуто и писать задачу
там тоже пришлось немного "попытать", прежде чем человек "сознался" :)

2
10 / 10 / 5
Регистрация: 12.01.2017
Сообщений: 387
16.12.2017, 14:00  [ТС]
alpap, YuS_2,
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
16.12.2017, 18:39
Лучший ответ Сообщение было отмечено sundraw как решение

Решение

sundraw, в код выше, как оказалось, закралась ошибка, поправляю:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal enabledelayedexpansion
set var=
for /l %%i in (1,1,10) do (
    set var=%%i
    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %%i execute --image "C:\Windows\RestartPC.bat" --username Admin --password 1 --recursive
    if errorlevel 1 (>>ErrorVM.txt echo.%date% %time%: Обнаружена ошибка запуска, машина N'%%i'&call :loop)
    echo.%date% %time%: Запуск контроля выполнен, машина: N'%%i'
)
pause&exit /b
 
:loop
 for /l %%a in (1,1,2) do (
    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %var% execute --image "C:\Windows\RestartPC.bat" --username Admin --password 1 --recursive
    if !errorlevel! equ 0 (>>ErrorVM.txt echo.%date% %time%: Исправлена ошибка на попытке N'%%a', машина N'%var%'&exit /b)
)
>>ErrorVM.txt echo.%date% %time%: Ошибка не исправлена, машина N'%var%'
exit /b
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2017, 18:39
Помогаю со студенческими работами здесь

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

P16F876. Написать программу с двумя циклами
Народ проблема такая , нужно написать программу чтоб в ней было 2 цикла в 1 ( decfsz ) есть прога где только 1 цикл .......может кто то...

После сортировки проверяю двумя циклами. Почему проверка идет очень медленно?
Всем привет. Клонирую элементы в переменную, потом создаю пары и записываю их в массив, после чего сортирую так как хочу. Потом по...

Модель цифрового счётчика (работа с портами)
Всем доброго времени суток. Только начал изучать моделирование с помощью AnyLogic 7. Хотел создать простой пример с цифровым счетчиком....

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru