Показать полную графическую версию : [решено] сравнение списка файлов!
Прошу помочь!
Есть два файла
1.txt и 2.txt
допустим в первом:
1.пиво
2.кружка
Во втором:
1.пиво
2.кружка
3.вотка
Задача сравнить ети два файла и получить из них разницу в виде "3.вотка"
То есть идея в чем, есть директория в которую будут добавляться периодически файлы над которыми должны выполнятся действия. при появлении будет выполнянтся команда dir сравнивать с предыдущим выводом этой команды или еталонным и получив список новых файлов куда то их копировать !
Спасибо !
Предлагаю не решать "влоб" Ваш вопрос, а заменить его в соотвествии с описанием задачи и таким образов свести решение к тому, что уже обсуждалось в этой ветке:
1. Есть каталог, где появляются новые, не обработанные файлы.
2. Некая часть скрипта (которую Вы пишете самостоятельно) выполняет некие действия над очередным файлом и помечает в логе, что файл уже обработан. Файлы, запись о которых уже есть в логе (даже не просто есть , а с пометкой "Ок") обрабатываться уже не будут.
Как Вам такой вариант?
если "сойдет", то вот, легкая модификация того, что здесь уже было:
@Echo off
SetLocal EnableExtensions
Set WorkDir=.\
Set Mask=*.*
Set GoodCondition=[Ok]
Set BadCondition=[fail]
set Log=%~dpn0.log
pushd %WorkDir%
for /f "tokens=1* delims=" %%F in ('dir /a-d /b /on %Mask%') do call :CheckLog "%%F"
popd
exit
:CheckLog
set File=%~1
for /f "tokens=* delims=" %%S in ('findstr /C:"%File%" %log% ^| findstr /C:"%GoodCondition%"') do exit /b
set Status=%GoodCondition%
rem Делаем что-нить полезное с файлом %File%, находящемся в текущем каталоге
Copy %File% nul
rem В случае, если обработка файла кончилась неудачно - обязательно смените "Status" на "неудачный"!!!
if Errorlevel 1 set Status=%BadCondition%
rem Кидаем пометку в лог
set tm=%time::=-%
set tm=%date:~6,4%-%date:~3,2%-%date:~0,2%_%tm:~0,-3%
echo %tm%: %Status% %File%>>%Log%
exit /b
Kobzar,
Echo off & Chcp 1251
set $SRC1="F:\1.txt" & rem файл-эталон
set $SRC2="F:\2.txt"
for /f %%a in ('Type "%$SRC2%"') Do (
(Find /i "%%a" %$SRC1% > nul)||Echo %%a)
pause
если заменить "Echo %%a" на "Echo %%a 1>> Change.log", то все
отличия будут содержаться в файле Change.log
Задача сравнить ети два файла и получить из них разницу »
@Echo Off
SetLocal EnableDelayedExpansion
:: Сравниваемые списки
Set lst1=1.txt
Set lst2=2.txt
:: Список отличий
Set diflst=3.txt
(For /F "tokens=* usebackq" %%i In ("%lst1%") Do (
Set fl=0
For /F "tokens=* usebackq" %%k In ("%lst2%") Do If %%i==%%k Set fl=1
If !fl!==0 Echo %%i
)
For /F "tokens=* usebackq" %%i In ("%lst2%") Do (
Set fl=0
For /F "tokens=* usebackq" %%k In ("%lst1%") Do If %%i==%%k Set fl=1
If !fl!==0 Echo %%i
))>"%diflst%"
deepred, если уникальные строки будут в обоих файлах, то в Вашем варианте будут выведены уникальные строки только из второго файла.
gora,
если уникальные строки будут в обоих файлах »Это не соответсвует условию задачисравнивать с предыдущим выводом этой команды или еталонным и получив список новых файлов » но тем не менее....
Echo off & Chcp 1251 & Cls
set $SRC1="F:\1.txt" & set $SRC2="F:\2.txt" & call :action
set $SRC1=%$SRC1:1=2% & set $SRC2=%$SRC1:2=1% & call :action
pause & goto :Eof
:action
for /f %%a in ('Type "%$SRC2%"') Do (
(Find /i "%%a" %$SRC1% > nul)||Echo %%a 1>> Change.log)
LAKERS824
06-07-2012, 19:30
а если не различия, а схождения надо найти?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.