Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 03.11.2010
Сообщений: 15
1

Массовая рассылка файлов

20.09.2012, 18:01. Просмотров 6599. Ответов 10
Метки нет (Все метки)

Подскажите, пожалуйста, как сделать правильно и понятно чтобы было:

файл со списком, куда нужно закинуть файл с названием "Отправка":

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
cd z:\kv
 
copy z:\XXX.doc Z:\ABRIS\OUT\XXX.doc
copy z:\XXX.doc Z:\ALEAN\OUT\XXX.doc
 
net send server XXX.doc was send!!!
end
Второй файл уже с кодом, где проходит так, как я понимаю обработка:


Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
rem Раскладка файла в выходные почтовые каталоги клиентов ...\OUT
rem Использование  Send_all <filename>  
rem Файл и батник располагаются в корне диска Z
z:
cd \\
dir /ad /b > dirk.txt
for /F %%i in (dirk.txt) do copy %1 z:\%%i\out\
del dirk.txt

Подскажите, как можно сделать или переделать скрипт чтобы


1. Файл который положить в папку с названием "отправка" например С:\Отправка. Тот файл, который закинули в папку ОТПРАВКА, автоматически отправился на сетевой диск в каталоги по списку (например \\название пк\kv\пупкин\out\ \\название пк\kv\пупкин вася\out\ и т.д.). Список около 100 папок.
2. Чтобы скрипт начинал работать, когда появится файл в папке "отправка" и рассылка начиналась.

Подскажите, как можно сделать это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2012, 18:01
Ответы с готовыми решениями:

Массовая рассылка почты
Здравствуйте. форумчане. На сайте собирался реализовать массовую рассылку почты пользователям, в...

Массовая рассылка писем
Нужно создать массовую рассылку писем по нескольким почтовым ящикам одновременно. Есть код на...

Массовая рассылка уведомлений
Здравствуйте. Я создал рассылку уведомлений по AJAX POST-запросу, но проблема в том, что на сервере...

Массовая рассылка писем
Добрый день, Подскажите пожалуйста как отослать письма многим людям? У меня есть на форме...

10
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28007 / 15733 / 971
Регистрация: 15.09.2009
Сообщений: 67,816
Записей в блоге: 78
21.09.2012, 00:48 2
а по человечески поднять почтовый сервер не судьба?
который будет рассылать письма с вложениями? (да или с текстом, не суть важно)
0
0 / 0 / 0
Регистрация: 03.11.2010
Сообщений: 15
21.09.2012, 08:40  [ТС] 3
Цитата Сообщение от magirus Посмотреть сообщение
а по человечески поднять почтовый сервер не судьба?
который будет рассылать письма с вложениями? (да или с текстом, не суть важно)
Смысла нету поднимать почтовый сервер. Тут задача в том , что бы разослать по каталогам один и тот же файл , можно и вручную посидеть час потратить. Но раз в неделю заводится пользователь но почта и не поможет даже. я набросал себе еще один скрыпт. по примеру Перенос файлов из одной папки в другую уже готового рабочего исполняет он другую роль но тут нужно писать много строк прийдется писать ничего не поделаешь . если я не сильно и понимаю в Батниках))

Былобы хорошо как бы список путей по которым нужно разбросать вайл и батник который будет перекидывать файлик по списку путей.
0
Эксперт WindowsАвтор FAQ
17476 / 7327 / 873
Регистрация: 25.12.2011
Сообщений: 11,103
Записей в блоге: 16
21.09.2012, 19:11 4
Цитата Сообщение от Alex2581 Посмотреть сообщение
2. Чтобы скрипт начинал работать, когда появится файл в папке "отправка" и рассылка начиналась.
Поясните, нужно чтобы это событие отслеживалось каким-то другим способом (не батником)?

Добавлено через 37 минут
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
set list=e:\copyfile.log
set file=e:\Dll.reg
:Start
if exist "%file%" (
    rem Имитация копирования на виртуальное устройство
    rem для определения наличия прав на копирование
    rem и завершения создания исходного файла
    :Awaiting
    >nul copy "%file%" Nul || (call :Pause 500&Goto :Awaiting)
    for /f "delims=" %%n in (%list%) do (
      >nul copy /y "%file%" "%%n" && echo Успешно скопирован в %%n
    )
    del /f /q "%file%"
  ) else (
    rem Задаем паузу в 1 сек. для разгрузки процессорного времени
    call :Pause 1000
)
Goto :Start
 
:Pause
ping -n 1 -w %1 192.168.254.254>NUL
Переменная file - имя распространяемого файла
list - текстовой файл со списком директорий (каждая на новой строке).
После завершения копирования исходный файл удаляется.
1
0 / 0 / 0
Регистрация: 03.11.2010
Сообщений: 15
22.09.2012, 13:45  [ТС] 5
отслеживание другим каким то способом (не батником) - я так понимаю написанием программы. в принципе нет не нужно, хотя это интересно.

Вопрос такой. Название файла всегда разное. и их бывает много от одного до двух трех но не больше и названия всегда разные.

Можно как то сделать как в статье Перенос файлов из одной папки в другую что бы положить в папку файл что бы мог кто то другой не знаю что нужно прописать имя где то в батнике. Батник запущен вложил кто то оно и отправило файл по списку каталога.

Хотя и такой вариант пойдет по списку с изменением это легче чем раскидывать в ручную в приблизительно в 1000 каталогов.
0
Эксперт WindowsАвтор FAQ
17476 / 7327 / 873
Регистрация: 25.12.2011
Сообщений: 11,103
Записей в блоге: 16
22.09.2012, 19:22 6
1)

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
::Файл-список директорий-получателей
set list=e:\copyfile.log
::Папка с отправляемыми файлами
set SourceDir=e:\2 2
:Start
2>nul dir "%SourceDir%" /b /a:-d && (
  for /f "delims=" %%a in ('dir "%SourceDir%" /b /a:-d') do (
    rem Имитация копирования на виртуальное устройство
    rem для проверки: завершено ли создание исходного файла
    Call :Awaiting "%%a"
    for /f "delims=" %%n in (%list%) do (
      >nul copy /y "%SourceDir%\%%a" "%%n" && echo %%a успешно скопирован в %%n
    )
    del /f /q "%SourceDir%\%%a"
  )
)
rem Задаем паузу в 1 сек. для разгрузки процессорного времени
call :Pause 1000
Goto :Start
 
:Pause
ping -n 1 -w %1 192.168.254.254>NUL
exit /b
 
:Awaiting
1>nul 2>&1 copy "%SourceDir%\%~1" Nul || (
  Echo %~1 - ожидаю...
  call :Pause 500
  Goto :Awaiting
)
exit /b
2)
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
::Файл-список директорий-получателей
set list=e:\copyfile.log
::Папка с отправляемыми файлами
set SourceDir=e:\2 2
:Start
2>nul dir "%SourceDir%" /b /a:-d && (
  for /f "delims=" %%a in ('dir "%SourceDir%" /b /a:-d') do (
    rem Имитация копирования на виртуальное устройство
    rem для проверки: завершено ли создание исходного файла
    1>nul 2>&1 copy "%SourceDir%\%%a" Nul && (    
      for /f "delims=" %%n in (%list%) do (
        >nul copy /y "%SourceDir%\%%a" "%%n" && echo %%a успешно скопирован в %%n
      )
      del /f /q "%SourceDir%\%%a"
    ) || (
      Echo %%a - пропущен.
    )
  )
)
rem Задаем паузу в 1 сек. для разгрузки процессорного времени
call :Pause 1000
Goto :Start
 
:Pause
ping -n 1 -w %1 192.168.254.254>NUL
Делал с дополнительным функционалом. Уж так захотелось.

В первом случае - скрипт будет ожидать завершения записи файла в исходный каталог (для распространения).

В втором - будет его пропускать, копировать другие файлы (если такие имеются),
а затем вернется к этому пропущенному файлу.
Такое вот непоследовательное (асинхронное) копирование.

Цитата Сообщение от Alex2581 Посмотреть сообщение
отслеживание другим каким то способом (не батником)
С какой целью?
1) Для разгрузки процессора - это не поможет. Батником нагрузки на проц и память будет меньше, а принцип опроса папки будет у скомпилированной программы такой же.
Чтобы еще снизить, можно увеличить паузу при опросе (там, где 1000).
2) Чтобы скрыть батник (на случай случайного закрытия пользователем), так для этого есть отдельные (тоже консольные) утилиты: CMDOW, например.

Кстати, полезный, однако, скрипт получился
2
0 / 0 / 0
Регистрация: 03.11.2010
Сообщений: 15
22.09.2012, 20:39  [ТС] 7
Первый способ мне нравится . Файлы будут встречаться так как из всех не все забирают файлы с своих папок.
Но со вторым не понял немного (а затем вернется к этому пропущенному файлу) это как понять?
0
Эксперт WindowsАвтор FAQ
17476 / 7327 / 873
Регистрация: 25.12.2011
Сообщений: 11,103
Записей в блоге: 16
22.09.2012, 20:58 8
Ну в смысле цикл проверки наличия файлов в исходном каталоге опять повторяется (остальные файлы после копирования ведь сразу удаляются из исходного каталога).

2)
1. Проверка, есть ли файлы в папке SourceDir
2. Если есть, проходим по каждому файлу циклом.
3. Если файл невозможно скопировать (он еще дописывается в исходную папку), пропускаем его
и выдаем сообщение - "файл пропущен". Смотрим сл. файл.
4. Если файл успешно скопировался на вирт. ус-во, копируем его во все папки, указанные в текстовом файле (переменная list).
5. Удаляем исходный файл. Завершение цикла (смотрим сл. файл).
6. Выход их цикла. Пауза 1 сек. И все повторяется. (ранее пропущенный файл не был удален,
поэтому будет предпринята очередная попытка его скопировать).

Цитата Сообщение от Alex2581 Посмотреть сообщение
так как из всех не все забирают файлы с своих папок.
теперь я Вас не понял...
1
0 / 0 / 0
Регистрация: 03.11.2010
Сообщений: 15
22.09.2012, 21:17  [ТС] 9
Хм.. Теперь у меня второй способ лучше так как понял его более понятно. Только увеличу значения 1000 на 1500.

Цитата Сообщение от Dragokas Посмотреть сообщение
теперь я Вас не понял...
Есть винт на котором находятся каталоги с именами пользователей Таких пользователей более 1000 или тысяча уже не помню точное количество.

У пользователя есть программа которую он запускает когда ему нужна. И при открытии он нажимает созвонится с сервером.. Она программа созванивается забирает с нашего диска файл с каталога того какой пользователь дозвонился с программы.

а те кто не связываются с сервером то там так и лежат файлики но вследущий раз когда будет заброс файлов это текстовый то это разные файлики текстовые с разными названиеми..

Добавлено через 3 минуты
Хотя первый вариант уже испробовал разослал Но поменял
Bash
1
@echo off
на
Bash
1
@echo on
Так как не писало что
Bash
1
>nul copy /y "%SourceDir%\%%a" "%%n" && echo %%a успешно скопирован в %%n
Спасибо что помогаете уже второй раз.
0
Эксперт WindowsАвтор FAQ
17476 / 7327 / 873
Регистрация: 25.12.2011
Сообщений: 11,103
Записей в блоге: 16
22.09.2012, 21:20 10
Вариант № 1 останавливается на пункте 3 и ожидает, пока файл не станет доступен для копирования.

Цитата Сообщение от Alex2581 Посмотреть сообщение
Так как не писало что Код Bash
Bash
1
 >nul copy /y "%SourceDir%\%%a" "%%n" && echo %%a успешно скопирован в %%n
Как бы, у меня пишет:
0
Миниатюры
Массовая рассылка файлов  
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 18
08.08.2018, 13:41 11
Добрый день помогите пожалуйста в написании bat должен он уметь:
1. есть папки их 10 с разными названиями
2. есть ftp также с 10 адресами
3. нужно чтобы в 1-ю папку попадал файл(в названии файла есть дата его создания) последний по дате с 1 ftp и так далее по очереди
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2018, 13:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Спам в скайпе, массовая рассылка
Доброго времени суток. Друзья написали, что идет от меня идет спам в скайпе. Пример ссылки: -...

Массовая рассылка с использованием IIS 5
У меня на серваке хостится несколько сайтов. В одном из них была функция автоматической отправки...

Массовая рассылка писем (не спам)
Не знаю в какой раздел засунуть тему, пусть будет тут, по причине, указанной в последнем абзаце. ...

Возможна ли Массовая почтовая рассылка
Здравствуйте. Извените за то что вопрос может быть глупым, но я в этой тем полный ноль. На Lotus...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.