sundraw
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору YuS_2 Исправленный пакетник: Код: @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\RestartPC.bat" --username Admin --password 1 --recursive 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\RestartPC.bat" --username Admin --password 1 --recursive IF ERRORLEVEL 0 GOTO begin ) goto begin | Счётчик в 1-м цикле теперь работает исправно. Вначале считал, что его задача "сохранять своё место" при переходах с одного цикла на другой, но может это и не понадобится. Что осталось сделать, постараюсь объяснить поподробнее. Здесь в первом цикле (1-10) под номерами %%i - номера виртуальных машин VirtualBox, в данном случае, здесь 10 разных виртуальных машин, в которые поочерёдно посылаются одинаковые команды RestartPC.bat из основной (хостовая, управляющая, железо) машины. Если с отправкой команды происходит ошибка, то работа проблемной машины должна перенаправиться во второй цикл с меткой :loop от 1 до 2, где переменная %%i уже означает количество попыток перезапуска команды в проблемной ВМ. Вот только надо как-то связать количество попыток (:loop) и проблемную машину. В данном случае делаются две такие попытки. Если какая-то одна из двух попыток завершилась успешно, то об этом как-то нужно сообщить, желательно, в сообщении должен стоять номер "исправленной" машины. Сам первый цикл можно не останавливать, пусть идёт своим ходом дальше. Если же во втором цикле (:loop) обе попытки выполнились с ошибкой, то эта ошибка должна направиться в текстовый файл с указанием номера, на котором произошла ошибка, то есть, если ошибка произошла на 4-м цикле, и не была исправлена, то в текстовый файл (к примеру ErrorVM.txt) должна записаться цифра 4, как номер(название) проблемной машины. Вот, пожалуй, и всё. Затем проблемные виртуальные машины из ErrorVM.txt я вношу на замену уже в другой скрипт, и за 5-10 минут их меняю на новые. P.S. Как я справляюсь с подобными ошибками сейчас, для ясности. Запускаю первый цикл из указанного скрипта только с одной командой "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol %%i execute --image "C:\Windows\RestartPC.bat" --username Admin --password 1 --recursive, ну ещё с паузой, и смотрю, когда выпадет ошибка в процессе работы. Вместо файла RestartPC.bat может быть совершенно любой и с разными задачами. Как только в какой-то из виртуалок происходит ошибка, я параллельно открываю точно такой же скрипт, но уже вручную вношу нужные номера в цикл, к примеру for /l %%i in (8,1,8), если ошибку выдала 8-я машина,и делаю столько попыток запуска, сколько понадобится. Запустилась - хорошо, не запустилась - на замену. Так вот, вышеприведённый скрипт должен автоматизировать этот процесс. Для примера я указал 10 машин, но их гораздо больше, поэтому и нужна автоматизация. | Всего записей: 873 | Зарегистр. 15-05-2011 | Отправлено: 07:04 16-12-2017 | Исправлено: sundraw, 08:56 16-12-2017 |
|