Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Параллельное копирование файлов в bat.

Ответить
Настройки темы
CMD/BAT - Параллельное копирование файлов в bat.

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Привет всем.
Такой вопрос возник.

Есть два диапазона значений, постоянно вырастающих на единицу.
Одно лежит в одном диапазоне (допустим 1-10), другое (15-25).
Нужно создавать папки именованные значением переменной диапазона.
Т.е. папки 1\ 2\ 3\ 4\ 5\ 6\ и т.д.
В эти папки нужно копировать один и тот-же файл.

Нужно написать такой батник, чтобы копирование происходило параллельно.
Т.е. одновременно идёт создание папки допустим 1 и папки 15.

Проблема в том, что у меня постоянно выходит последовательное копирование при помощи for.
Код набросал, но так и не додумался как сделать параллельное копирование.
+ перед каждым копированием, нужно пинговать удаленный сервер (на самом деле 1,2,3 это цифры в IP, но не суть).

Отправлено: 06:33, 12-01-2014

 

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


В общем попробЫвал все и все-равно возникают проблемы.
Нужно чтобы при отсутствии пинга выводилось сообщение об ошибке, а если связи нет, то и не должно быть копирования.
Для этого мне нужно объеденить проверку пинга в одну функцию, но этого не сделать.

В итоге сделал так, нормально не работает

test.cmd
Цитата:

@echo off
set fvar=%3

for /l %%i in (%1,1,%2) do (
(1>nul 2>&1 ping -n 1 192.168.%%i.1) && echo No connection to 192.168.%%i.1 || echo Con to 192.168.%%i.1 && (md test\192.168.%%i.1 && copy %fvar% test\192.168.%%i.1) || echo Cannot copy %fvar%
run.bat
Цитата:
@echo off

set filename="%COMPUTERNAME%.txt"

call make.bat %filename% && if %errorlevel%==0 (
start test.cmd 11 34 %filename%
start test.cmd 42 80 %filename%
)

pause
Помогите пожалуйста сделать так, чтобы создание папки и копирование происходили только тогда, когда пинг есть, при этом если его нету, должно выводиться свое сообщение что связи нет.

Последний раз редактировалось Dremor, 12-01-2014 в 18:15.


Отправлено: 18:06, 12-01-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Dremor, У меня такой вариант работает:
Код: Выделить весь код
@echo off
setlocal

set "exec=xcopy %computername%.txt D:\Downloads\%%%i.ru\"
set "error=echo wrong host %%%i.ru"

for %%i in (ya,щщ,юю) do start /b cmd /c "1>nul 2>&1 ping -n 1 %%i.ru && (%exec%) || (%error%)
У меня нет возможности пинговать устройства в локалке, поэтому взял существующий ya.ru и два заведомо ложных, в вашем случае измените на:
Код: Выделить весь код
@echo off
setlocal

set "exec=xcopy %computername%.txt testfolder\192.168.%%%i.1\"
set "error=echo wrong ip 192.168.%%%i.1"

for /l %%i in (%1,1,%2) do start /b cmd /c "1>nul 2>&1 ping -n 1 192.168.%%i.1 && (%exec%) || (%error%)
PS. Для проверки пинга будет лучше и правильней такая конструкция:
Код: Выделить весь код
... ping -n 1 192.168.%%i.1 | 1>nul findstr "TTL" && ( %exec% ) || ( %error% )
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:25, 12-01-2014 | #12


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Исправил проверку пинга и вроде заработало, пока ещё решаю остальные вопросы
Ложная тревога, теперь с такой проверкой пинга в любом случае выдаёт ошибку wrong ip, хотя пингую локальный 192.168.1.1


В случае же отсутствия строчки
Цитата:
| 1>nul findstr "TTL"
не выдается сообщение об ошибке пинга.
Файлы тоже копируются.
Хотя проверил сам, все айпишники не пингуются.

Разберусь - отпишусь, похоже ковычки где-то пропустил.

Последний раз редактировалось Dremor, 12-01-2014 в 20:04.


Отправлено: 19:54, 12-01-2014 | #13


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Теперь возникла еще проблема:
Мы количество отчетов об ошибках урезали, а нужно чтобы выдавались также ошибки о том, что файл не может быть копирован.
Т.е. на пинг проверили, а потом ещё на само копирование.

Да, ещё непонятно как вывести сообщения об ошибках в главное окно.
Или сделать так, чтобы работало только одно окно. (Встаёт проблема параллельности копирования)

Отправлено: 20:12, 12-01-2014 | #14


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Dremor, Если не секрет, зачем эта параллельность? Просто возникают затруднения в написании, а выигрыш во времени скорее всего сомнительный. Убрать все эти start cmd и ничего не потеряешь. Файлы текстовые, так ведь, если тяжелые, то хотя бы запускать только xcopy.exe в нескольких экземплярах:
Код: Выделить весь код
@echo off
setlocal

for /l %%i in (%1,1,%2) do (

    ping -n 1 192.168.%%i.1 | 1>nul findstr "TTL" && (

        start /b 1>nul 2>&1 xcopy %computername%.txt "folder\192.168.%%i.1\" || echo can't copy to folder\192.168.%%i.1

    ) || ( 

        echo ping error 192.168.%%i.1

))
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:40, 12-01-2014 | #15


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Это мне так задали сделать, зачем я сам не понимаю.
Последовательно я давно все написал.

Вообще мне легче это всё в С++ сделать, чем париться с гениальной cmd, но надо значит надо

Спасибо за пример, я также сделал.
От этих скобочек уже голова болит.

Я уже по сути все сделал, осталось последнее условие.
Как сделать вывод в run.bat, когда start.cmd Отработали?

Т.е. операция прошла и мне нужно сделать вывод о том, что батник работу завершил и какой результат (ну тут понятно, еррорлевел наверное проще сделать).

Отправлено: 20:44, 12-01-2014 | #16


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата Dremor:
Как сделать вывод в run.bat, когда start.cmd Отработали? »
Боюсь, что он ничего не знает о запущенных батниках, он просто запускает и прекращает свою работу. Можно конечно добавить waitfor:
Код: Выделить весь код
:: run.cmd
@echo off

start 1.cmd

waitfor signal_name
Код: Выделить весь код
:: 1.cmd

timeout 5
waitfor /si signal_name
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:00, 12-01-2014 | #17


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ох уж эти батники, я за день общения с ними (до этого вообще 0 знал по ним) свихнулся просто напросто.
Лучше бы был встроенный компилятор многих языков, написал код и всё.

Спасибо за помощь Foreigner, очень помог.

Отправлено: 21:07, 12-01-2014 | #18

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Foreigner:
И лучше copy.cmd назвать как-нибудь иначе, на всякий случай. »
"Эт точно!" Стандартная ошибка -- назвать .bat/.cmd именем существующей команды, а затем удивляться, почему всё работает не так как должно работать, если запускать (или изнутри другой программы передавать параметры) без явного указания расширения.

Dremor,
Да и run.bat лучше бы переобозвать (поскольку имя программ run.exe, как и launch.exe, тоже периодически попадается, и обработка может уйти к таким программам).

-------
Mikhail Zhilin


Отправлено: 23:06, 12-01-2014 | #19



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Параллельное копирование файлов в bat.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование системных файлов через bat savvato Скриптовые языки администрирования Windows 12 28-03-2019 19:44
CMD/BAT - [решено] Резервное копирование через bat-скрипт. Xsaner Скриптовые языки администрирования Windows 5 25-09-2014 11:44
CMD/BAT - Как настроить последовательный запуск bat-файлов в другом bat. codi28 Скриптовые языки администрирования Windows 12 27-11-2013 18:30
CMD/BAT - Копирование по FTP .bat Vao Скриптовые языки администрирования Windows 0 17-10-2011 10:29
CMD/BAT - [решено] .bat Копирование с условием TwoThrones Скриптовые языки администрирования Windows 1 09-01-2011 14:51




 
Переход