slava 1 Вот [more=краткий
разбор]
FOR %%a IN (имена файлов) DO команда параметры - самый простой вызов FOR, перебирает имена файлов (может пользоваться маской, например *.log или image???.jpg), по очереди подставляет их в переменную %%a, и вызавает команду "команда" с параметрами "параметры".
Например:
FOR %%a IN (*.txt) DO echo Найден текстовый файл %%а -
перебирает имена всех файлов с расширением TXT и печатает сообщения типа "Найден текстовый файл README.TXT"
for /f "usebackq tokens=3,%TIMEPOS%" %%a IN (`more +%LINES% usdownloader.log`) do @call :CheckTimeOut %%a %%b %TIME% - если в этой команде использовать ключ /F, то она производит разбор строк на отдельные слова. В этом случае после /F задаются в кавычках параметры разбора. В скобках можно указать не только список файлов, но и текстовую строку, и команду, результат которой должен быть разобран.
... IN (имена файлов) DO ... - файлы для разбора.
... IN ("строка для разбора") DO ... - разбирается собственно указаная строка.
... IN ('команда параметры') DO ... - разбирать то, что команда выводила бы на экран.
Если среди параметров после /F указать usebackq, то синтаксис в скобках немного поменяется:
... IN (имена файлов) DO ... - файлы для разбора, как и раньше.
... IN ('строка для разбора') DO ... - разбирается собственно указаная строка, теперь - в одиночных кавычках, внутри можно использовать двойные.
... IN (`команда параметры`) DO ... - разбирать то, что команда выводила бы на экран. Команда, как в нашем случае, заключена в обратные кавычки, можно пользоваться двойными и одиночными кавычками внутри строки.
По умолчанию разделительными элементами служат пробел и табуляция, но можно указать и другие, в том числе - несколько разделителей. Для этого в кавычках после /F надо указать delims= и строчка разделителей. Например:
delims=.!? - использовать точку, вопросительный или восклицательный знаки как границу элементов (например, разбор на предложения).
Параметр
tokens=3,%TIMEPOS% указывает, что из строки надо извлечь третий и %TIMEPOS%-ый элементы. В логе в строку с ошибкой на третьем месте (если делить пробелами) попадает буква x, а на %TIMEPOS%-ом, если это ошибка типа "Ждите еще 120 минут" - минуты. При разборе первый указаный элемент попадет в переменную %%a (в нашем случае, вообще - в ту, что написана перед IN), а все прследующие - в соответствующие (автоматически созданые) по порядку. У нас - в %%b.
Команда в скобках -
more +%LINES% usdownloader.log - выводит содержимое файла usdownloader.log, начиная со строки, номер которой находится в переменной %LINES%. В первой части файла вычисляется номер этой строки. Таким образом, мы выводим только %ERRORLINE% последних строк (хотя реально нужна только %ERRORLINE%-ная от конца файла).
@call :CheckTimeOut %%a %%b %TIME% - Команда call обычно используется для вызова другого BAT-файла, но в XP ей можно указать в качестве параметра метку внутри файла, в котором она находится. При этом команды от метки до конца файла выделяются в виртуальный BAT-файл, который получает при запуске указаные параметры (в нашем случае - %%a, %%b и %TIME%, то есть, теоретически, x, время ожидания и контрольное время).
[/more] того, как происходит проверка времени.