Показать полную графическую версию : [решено] Сравнение содержимого папок и копирование недостающих файлов
Имеем три каталога:
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...
Так и не понял, как можно втиснуть в этот код оператор else... »
…if not exist "%third%\%%i" (copy "%%i" "%second%\%%i") else (…)
DesmondTruman, спасибо!
Цикл потому, что с первого раза файл может не обработаться, нужно перепроверить несколько раз.
Iska, спасибо!
Цитата 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
причем файлы он видит, т.к. выводит:
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
ПРОВЕРИТЬ ОТПРАВКУ
В чем прикол, я целый день голову ломаю ):
@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
SET "otpr=D:\temp\FNSsendTODAY\otpravleno\"
for %%i in (*.txt) do if not exist "%otpr%\%%i" (
echo ПРОВЕРИТЬ ОТПРАВКУ
) ELSE echo ВСЕ что ПОДГОТОВИЛИ отправленно »
Если бы в зтом варианте вместо *.txt был прописан полный путь, то тогда вместо "%otpr%\%%i" нужно было также записать "%otpr%%%~nxi"
Margon, ознакомьтесь с тегами форума (http://forum.oszone.net/misc.php?do=bbcode), и в первую очередь — с тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code). Читать Ваш пост невозможно.
Georgio, Спасибо огромное, заработало. А теперь бы еще понять что это значит.
Iska, Поправил.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.