|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Выполнение одной программы несколько раз и запись результатов в файл |
|
CMD/BAT - Выполнение одной программы несколько раз и запись результатов в файл
|
Новый участник Сообщения: 42 |
Профиль | Отправить PM | Цитировать Собственно вот такая проблема возникла. Есть txt файл. На каждой строчке url. Есть программа которая эти url обрабатывать может, но по одному. Нужно автоматизировать процесс и записать в файл все что выведет программа после обработки.
Обработка 1ого урл в этой программе для современных машин дело плевое, поэтому я захотел блекджека и шлюх, то есть обрабатывать несколько урлов одновременно, хотя это и необязательно, но желательно. Вобщем как я решил делать. 1) спрашиваю у юзера сколько он хочет обрабатывать урлов одновременно (обычно их несколько десятков тысяч, поэтому как ни крути но работу лучше сделать по частям, кроме того канал у людей не резиновый) 2) далее запускаю несколько экземпляров программы с разными урлами а результаты сохраняю в лог. 3) скорость обработки каждого из урлов будет разная поэтому как только освобождается часть свободного места, количество которого указали в пункте 1, нужно запускать новый экземпляр программы с новым урлом. И вот в этом загвоздка. Как определить, что программа закончила работу с 1им урлом и загрузить ее новым? |
|
Отправлено: 08:32, 09-08-2012 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Так, ну значит программа моя по окончании своей работы (да кстати она консольная если кто не понял) выдает 100% надпись одну. То есть можно следить за логом и с каждым появлением записи об окончании запускать обработку нового урла. Только вот я не знаю как сделать подобное «слежение».
|
Отправлено: 13:17, 09-08-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать у меня новый вопрос. как запустить программу с параметрами, а результаты сохранить в лог?
то есть например у меня есть программа file.exe и запускать его надо так: file.exe -url=http://yandex.ru/ так вот как сохранить в лог то, что выведет программа после запуска? я пытался сделать вот так: (file.exe -url=http://yandex.ru/)>log.txt и так file.exe -url=http://yandex.ru/ > log.txt результат 1 и тот же: в логе написано EInOutError: I/O error 6 + название программы. |
Отправлено: 21:08, 09-08-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать
или:
Цитата Megatron13:
|
|
Отправлено: 06:53, 10-08-2012 | #4 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Цитата Megatron13:
ThreadBalancer.cmd - тут указывается количество параллельно запущенных потоков, входной файл с url делится поровну между ними Threads - потоки, Data - файл с URL-ками @Echo Off SetLocal EnableDelayedExpansion :: Настройки Set Data=data.txt Set Threads=3 :: Подсчет общего числа строк Set sCount=0&For /F "usebackq" %%A In ("%Data%") Do Set /A sCount+=1 :: Делим данные на части по количеству потоков Set /A SingleThread=sCount/Threads :: Удаляем предыдущие временные данные Del "%Temp%\$thread*.txt" 2>nul :: Проверяем, есть ли остаток Set /A AllThreads=SingleThread*Threads If %AllThreads%==%sCount% ( rem Без остатка, просто разделяем данные на части по числу потоков Set cString=0&Set ThreadNum=1&Set /A Reset=SingleThread+1 For /F "useback delims=" %%A In ("%Data%") Do ( Set /A cString+=1 If !cString!==!Reset! (Set /A ThreadNum+=1&Set cString=1) Echo %%A>>"%Temp%\$thread!ThreadNum!.txt" ) ) Else ( rem Есть остаток, добавляем излишки к последнему потоку Set cString=0&Set ThreadNum=1&Set /A Reset=SingleThread+1 For /F "useback delims=" %%A In ("%Data%") Do ( Set /A cString+=1 If !cString!==!Reset! ( If Not !ThreadNum! GEQ %Threads% (Set /A ThreadNum+=1) Set cString=1 ) Echo %%A>>"%Temp%\$thread!ThreadNum!.txt" ) ) :: Запускаем потоки, выполняющие последовательно каждый свою часть работы :: Запуск производится в том же окне, чтобы не спамить окнами при большом :: количество потоков For /L %%N In (1,1,%Threads%) Do ( Start /B Thread.cmd "%Temp%\$thread%%N.txt" ) Pause>nul А здесь уже собственно, запускается сама программа, которой поочередно скармливаются URL из диапазона, отданного потоку. С вызовом программы сами уже определяйтесь, куда что и как перенаправлять. |
||
Отправлено: 08:17, 10-08-2012 | #5 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать так, спасибо за помощь с пунктами 1 и 3.
а со 2ым пунктом я решил поступить вот так: http://www.cyberforum.ru/win-api/thread626505.html |
Отправлено: 21:58, 10-08-2012 | #6 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать ууупс, похоже, что из-за конструктивных особенностей программы лучше каждый поток запустить в отдельном окне. в конце концов окна эти можно сделать невидимыми!
|
Отправлено: 22:37, 10-08-2012 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Результат выполнение комманды в файл | fooger | Скриптовые языки администрирования Windows | 9 | 05-04-2018 14:09 | |
Выполнение программы в скрытом виде | Serg2010 | AutoIt | 4 | 09-04-2012 21:40 | |
CMD/BAT - [решено] Нужен батник для сканирования папок и записи результатов в файл | Nun-Nun | Скриптовые языки администрирования Windows | 7 | 22-09-2010 15:23 | |
.NET - Запись настроек программы в файл txt и чтение этих настроек обратно | ProgrammerPC | Программирование и базы данных | 4 | 11-12-2009 10:46 | |
В реестре запретить выполнение программы | mahno | Microsoft Windows 95/98/Me (архив) | 5 | 10-03-2003 19:22 |
|