У меня есть пакетный файл, который загружает 21 отдельный файл (все очень большие). У меня есть тайм-ауты, чтобы попытаться разрешить некоторые файлы завершить, прежде чем пытаться получить больше (не очень хорошее решение), и если все они работают вместе, то все мои системные ресурсы и все прерываются.Ограниченное количество пакетных файлов, запущенных циклом FOR
Я могу положить/ПОДРОБНО в мой цикл FOR, тогда он будет запускать только одну задачу загрузки за раз. Я хотел бы запустить 5 загрузочных окон, и как только они закончатся, переходите к следующему 5. Я пытался использовать GOTO, чтобы дождаться окончания, но он не работает.
rem *****Step 1*****
set tstart=0
set tend=5
set incr=1
FOR /L %%a IN (%tstart%,%incr%,%tend%) DO (start /ABOVENORMAL GET_PIECE_ENSEMBLE.bat %newformatdate% 0%%a %HH%)
timeout /t 30
:WAIT
if exist flagfile.* goto WAIT
Тогда у меня есть еще 4 шага для загрузки файлов 5-10, 11-16 и т.д. Но если это займет удлиненным скачать, скрипт двигается и начинает загружать несколько файлов или двигаются к следующему процессов, которые требуют, чтобы все данные сначала загружались. Я пробую здесь 2 вещи: короткий тайм-аут, чтобы обеспечить загрузку данных (поэтому существует файл флага) и ждать, если флаг существует. Но ожидание не работает, скрипт продолжает двигаться и начинает загрузку следующей группы. Моим обходным решением было установить тайм-аут 600, но иногда загрузка данных занимает более 10 минут, иногда она зависает и занимает до двух часов, иногда всего несколько минут. Если все части запускаются сразу, это замерзает рабочую станцию, и мы должны перезапустить машину.
А вот код GET_PIECE_ENSEMBLE, скрипт, который работает в цикл:
set "newformatdate=%1"
set "ename=%2"
set "HH=%3"
echo %time% > flagfile.%ename%
wget -O C:/Data/DataFile_%HH%.%ename%.grb2 http://url/%newformatdate%.grib2
del flagfile.%ename%
Глядя за советом либо как сделать «ждать, если flagfile существует» работа (любая идея, почему это ISN 't working?), или если есть какой-то простой аргумент, я могу включить в цикл FOR цикл, чтобы ограничить количество экземпляров, поэтому загрузка заканчивается до того, как другие начнут? Разумеется, есть лучшее решение, чем угадать в тайм-аут, когда сетевые условия меняются так сильно!
Таким образом, вместо того, чтобы в любой момент времени работать не более, чем пять, вы хотите подождать до полного набора из пяти окон до перехода к следующему набору из пяти? – SomethingDark
В любом случае, я просто хочу запустить более одного (использовать пропускную способность), но не все 21 из них, потому что это слишком много, все они идут очень медленно и сбой рабочей станции. –