![]() |
Параллельное копирование файлов в bat.
Привет всем.
Такой вопрос возник. Есть два диапазона значений, постоянно вырастающих на единицу. Одно лежит в одном диапазоне (допустим 1-10), другое (15-25). Нужно создавать папки именованные значением переменной диапазона. Т.е. папки 1\ 2\ 3\ 4\ 5\ 6\ и т.д. В эти папки нужно копировать один и тот-же файл. Нужно написать такой батник, чтобы копирование происходило параллельно. Т.е. одновременно идёт создание папки допустим 1 и папки 15. Проблема в том, что у меня постоянно выходит последовательное копирование при помощи for. Код набросал, но так и не додумался как сделать параллельное копирование. + перед каждым копированием, нужно пинговать удаленный сервер (на самом деле 1,2,3 это цифры в IP, но не суть). |
Dremor, Ваши интервалы различны по длине: в одном 10 значений, в другом — 11.
Цитата:
Цитата:
|
Цитата:
Да и слово "параллельно"... Вопрос, что быстрее происходит: исполнение команды -- или синтаксический разбор системой батника и переход к следующей строке. |
Цитата:
Как можно это реализовать при помощи "start cmd /c COPY" в цикле? Цитата:
Это я реализовал, но последовательно. |
Попробуй так:
Код:
@echo off |
Спасибо, а как теперь организовать параллельную запись?
Т.е. два цикла, один этот (11,1,34), другой (36,1,79)? Я просто не могу понять, как запустить два цикла параллельно. Ладно если бы цикл в цикле был, но здесь в теле цикла реализовать это очень трудно. Я то сделал два батника, copy1.bat и copy2.bat, они одинаковые, просто работают с двумя диапазонами. |
Dremor, Просто прописать в run.cmd
Код:
start copy.cmd 11 34 Код:
for /l %%i in (%1,1,%2) do .... И лучше copy.cmd назвать как-нибудь иначе, на всякий случай. |
Спасибо, сегодня попробую обязательно.
|
Подскажите ещё пожалуйста, как послать вывод c copy.cmd на главное окно?
Т.е. я запустил run.bat, пошла copy.cmd и чтобы все ошибки она выводила в run.bat? |
Главное, чтобы размеры копируемого по сети были адекватными. Иначе параллелизация приведёт к противоположному от ожидаемого эффекту.
|
В общем попробЫвал все и все-равно возникают проблемы.
Нужно чтобы при отсутствии пинга выводилось сообщение об ошибке, а если связи нет, то и не должно быть копирования. Для этого мне нужно объеденить проверку пинга в одну функцию, но этого не сделать. В итоге сделал так, нормально не работает test.cmd Цитата:
Цитата:
|
Dremor, У меня такой вариант работает:
Код:
@echo off Код:
@echo off Код:
... ping -n 1 192.168.%%i.1 | 1>nul findstr "TTL" && ( %exec% ) || ( %error% ) |
Исправил проверку пинга и вроде заработало, пока ещё решаю остальные вопросы :)
Ложная тревога, теперь с такой проверкой пинга в любом случае выдаёт ошибку wrong ip, хотя пингую локальный 192.168.1.1 :( В случае же отсутствия строчки Цитата:
Файлы тоже копируются. Хотя проверил сам, все айпишники не пингуются. Разберусь - отпишусь, похоже ковычки где-то пропустил. |
Теперь возникла еще проблема:
Мы количество отчетов об ошибках урезали, а нужно чтобы выдавались также ошибки о том, что файл не может быть копирован. Т.е. на пинг проверили, а потом ещё на само копирование. Да, ещё непонятно как вывести сообщения об ошибках в главное окно. Или сделать так, чтобы работало только одно окно. (Встаёт проблема параллельности копирования) |
Dremor, Если не секрет, зачем эта параллельность? Просто возникают затруднения в написании, а выигрыш во времени скорее всего сомнительный. Убрать все эти start cmd и ничего не потеряешь. Файлы текстовые, так ведь, если тяжелые, то хотя бы запускать только xcopy.exe в нескольких экземплярах:
Код:
@echo off |
Это мне так задали сделать, зачем я сам не понимаю.
Последовательно я давно все написал. Вообще мне легче это всё в С++ сделать, чем париться с гениальной cmd, но надо значит надо :) Спасибо за пример, я также сделал. От этих скобочек уже голова болит. Я уже по сути все сделал, осталось последнее условие. Как сделать вывод в run.bat, когда start.cmd Отработали? Т.е. операция прошла и мне нужно сделать вывод о том, что батник работу завершил и какой результат (ну тут понятно, еррорлевел наверное проще сделать). |
Цитата:
Код:
:: run.cmd Код:
:: 1.cmd |
Ох уж эти батники, я за день общения с ними (до этого вообще 0 знал по ним) свихнулся просто напросто.
Лучше бы был встроенный компилятор многих языков, написал код и всё. Спасибо за помощь Foreigner, очень помог. |
Цитата:
Dremor, Да и run.bat лучше бы переобозвать (поскольку имя программ run.exe, как и launch.exe, тоже периодически попадается, и обработка может уйти к таким программам). |
Время: 15:13. |
Время: 15:13.
© OSzone.net 2001-