Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сравнение содержимого папок и копирование недостающих файлов (http://forum.oszone.net/showthread.php?t=232127)

Laertes 05-04-2012 15:18 1894008

Сравнение содержимого папок и копирование недостающих файлов
 
Имеем три каталога:
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 1894300

Я только не понимаю, к чему тут задержка в 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 1894306

Цитата:

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

Код:

…if not exist "%third%\%%i" (copy "%%i" "%second%\%%i") else (…)

Laertes 06-04-2012 10:50 1894535

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

Margon 08-05-2013 15:25 2146592

Цитата 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 2146600

Код:

@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 2146640

Цитата:

Цитата 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"

Iska 08-05-2013 18:57 2146698

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

Margon 14-05-2013 11:34 2149816

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

Iska, Поправил.


Время: 01:18.

Время: 01:18.
© OSzone.net 2001-