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

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

Ответить
Настройки темы
CMD/BAT - [решено] Сравнение содержимого папок и копирование недостающих файлов

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


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

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


Изменения
Автор: Laertes
Дата: 05-04-2012
Описание: уточнение
Имеем три каталога:
1 - файлы
2 - пустой
3 - файлы, совпадающие по названию с файлами из каталога 1, но отличающиеся от них по своему содержимому.

Нужен батник, который:
Cравнивает содержимое папок 1 и 3 (по именам файлов)
Если в папке 1 есть файл, которого нет в папке 3, то нужно скопировать этот файл из 1 в 2.

Действие это нужно заключить в цикл с задержкой 5 секунд, и выполнять до тех пор, пока содержимое папок 1 и 3 не будет совпадать.
Сравнивать нужно по имени файла, а не по содержимому.



Поясню, для чего всё это.
а) Файлы автоматически скачиваются с сервера в папку 1.
б) Батник без всяких условий копирует все эти файлы из 1 в 2.
в) Специальное ПО забирает файлы из 2, и после обработки кидает их в папку 3, не меняя название

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

Отправлено: 15:18, 05-04-2012

 

Пользователь


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

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


Я только не понимаю, к чему тут задержка в 5 сек., если при первом же копировании в 1 и 3 будут одинаковые файлы.
И еще неизвестно, какие именно форматы файлов вам нужны (.txt .exe .doc .html)
Цитата:
@echo off
set "first=Сюда пишите полный путь к каталогу 1"
set "second=Сюда пишите полный путь к каталогу 2"
set "third=Сюда пишите полный путь к каталогу 3"
for %%i in (*.doc) do if not exist "%third%\%%i" copy "%%i" "%second%\%%i"
exit
Выделенное правите под себя и этот батник нужно запускать в папке №1.

Так и не понял, как можно втиснуть в этот код оператор else...

Отправлено: 21:43, 05-04-2012 | #2



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

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


Ветеран


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

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


Цитата DesmondTruman:
Так и не понял, как можно втиснуть в этот код оператор else... »
Код: Выделить весь код
…if not exist "%third%\%%i" (copy "%%i" "%second%\%%i") else (…)
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:59, 05-04-2012 | #3


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


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

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


DesmondTruman, спасибо!
Цикл потому, что с первого раза файл может не обработаться, нужно перепроверить несколько раз.
Iska, спасибо!

Отправлено: 10:50, 06-04-2012 | #4


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


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

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


Цитата DesmondTruman:
этот батник нужно запускать в папке №1. »
У меня похожая задача, только батник надо открывать не из папки, а с другого компа. Папка расшарина и подключена сетевым диском.


Вот так все работает

Код: Выделить весь код
SET "otpr=D:\temp\FNSsendTODAY\otpravleno\"
for %%i in (*.txt)  do if not exist "%otpr%\%%i" ( 
echo ПРОВЕРИТЬ ОТПРАВКУ 
) ELSE echo ВСЕ что ПОДГОТОВИЛИ отправленно 
exit /b

goto end
:-------------------------------------------------------------------------------
:end
Вывод такой:
Цитата:
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ВСЕ что ПОДГОТОВИЛИ отправленно
ВСЕ что ПОДГОТОВИЛИ отправленно
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
А вот так нет
Код: Выделить весь код
SET otpr=D:\temp\FNSsendTODAY\OTPRAVLENO\
SET dir1=D:\temp\FNSsendTODAY\PODGOTOVLENO\
for %%i in (%dir1%*txt)  do if not exist "%otpr%\%%i" ( 
echo ПРОВЕРИТЬ ОТПРАВКУ 
) ELSE echo ВСЕ что ПОДГОТОВИЛИ отправленно 
exit /b

goto end
:-------------------------------------------------------------------------------
:end
причем файлы он видит, т.к. выводит:
Цитата:
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
В чем прикол, я целый день голову ломаю ):

Последний раз редактировалось Margon, 14-05-2013 в 11:36. Причина: ошибся


Отправлено: 15:25, 08-05-2013 | #5


Ветеран


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

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


Код: Выделить весь код
@ECHO OFF
SET otpr=D:\temp\FNSsendTODAY\OTPRAVLENO\
SET dir1=D:\temp\FNSsendTODAY\PODGOTOVLENO\
for %%i in (%dir1%*txt)  do if not exist "%otpr%%%~nxi" ( 
echo ПРОВЕРИТЬ ОТПРАВКУ 
) ELSE echo ВСЕ что ПОДГОТОВИЛИ отправленно 
PAUSE

Отправлено: 15:57, 08-05-2013 | #6


Ветеран


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

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


Цитата Margon:
Код: Выделить весь код
SET "otpr=D:\temp\FNSsendTODAY\otpravleno\"
for %%i in (*.txt) do if not exist "%otpr%\%%i" ( 
echo ПРОВЕРИТЬ ОТПРАВКУ 
) ELSE echo ВСЕ что ПОДГОТОВИЛИ отправленно
»
Если бы в зтом варианте вместо *.txt был прописан полный путь, то тогда вместо
Код: Выделить весь код
"%otpr%\%%i"
нужно было также записать
Код: Выделить весь код
"%otpr%%%~nxi"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:13, 08-05-2013 | #7


Ветеран


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

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


Margon, ознакомьтесь с тегами форума, и в первую очередь — с тэгом [code]. Читать Ваш пост невозможно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:57, 08-05-2013 | #8


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


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

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


Georgio, Спасибо огромное, заработало. А теперь бы еще понять что это значит.

Iska, Поправил.

Отправлено: 11:34, 14-05-2013 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Множественное копирование файлов и папок Timerlan-87 AutoIt 4 07-06-2012 09:13
Любой язык - Копирование текстовых файлов в зависимости от их содержимого Brigadir_33 Скриптовые языки администрирования Windows 1 28-02-2012 08:02
PowerShell - [решено] Сравнение содержимого двух CSV файлов dosperados Скриптовые языки администрирования Windows 7 31-01-2012 10:47
CMD/BAT - [решено] Двойное копирование и перемещение файлов и папок Arsenik77 Скриптовые языки администрирования Windows 1 24-10-2011 21:13
CMD/BAT - [решено] Копирование папок и файлов по маскам dorosa Скриптовые языки администрирования Windows 10 28-01-2011 14:18




 
Переход