Войти

Показать полную графическую версию : [решено] Сравнение содержимого папок и копирование недостающих файлов


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

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

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



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

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

DesmondTruman
05-04-2012, 21:43
Я только не понимаю, к чему тут задержка в 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...

Iska
05-04-2012, 21:59
Так и не понял, как можно втиснуть в этот код оператор else... »
…if not exist "%third%\%%i" (copy "%%i" "%second%\%%i") else (…)

Laertes
06-04-2012, 10:50
DesmondTruman, спасибо!
Цикл потому, что с первого раза файл может не обработаться, нужно перепроверить несколько раз.
Iska, спасибо!

Margon
08-05-2013, 15:25
Цитата 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

причем файлы он видит, т.к. выводит:

ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ

В чем прикол, я целый день голову ломаю ):

Georgio
08-05-2013, 15:57
@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

Georgio
08-05-2013, 17:13
SET "otpr=D:\temp\FNSsendTODAY\otpravleno\"
for %%i in (*.txt) do if not exist "%otpr%\%%i" (
echo ПРОВЕРИТЬ ОТПРАВКУ
) ELSE echo ВСЕ что ПОДГОТОВИЛИ отправленно »

Если бы в зтом варианте вместо *.txt был прописан полный путь, то тогда вместо "%otpr%\%%i" нужно было также записать "%otpr%%%~nxi"

Iska
08-05-2013, 18:57
Margon, ознакомьтесь с тегами форума (http://forum.oszone.net/misc.php?do=bbcode), и в первую очередь — с тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code). Читать Ваш пост невозможно.

Margon
14-05-2013, 11:34
Georgio, Спасибо огромное, заработало. А теперь бы еще понять что это значит.

Iska, Поправил.




© OSzone.net 2001-2012