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

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

Ответить
Настройки темы
CMD/BAT - [решено] сравнение списка файлов!

Аватара для Kobzar

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


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

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


Прошу помочь!
Есть два файла
1.txt и 2.txt
допустим в первом:

1.пиво
2.кружка

Во втором:

1.пиво
2.кружка
3.вотка

Задача сравнить ети два файла и получить из них разницу в виде "3.вотка"
То есть идея в чем, есть директория в которую будут добавляться периодически файлы над которыми должны выполнятся действия. при появлении будет выполнянтся команда dir сравнивать с предыдущим выводом этой команды или еталонным и получив список новых файлов куда то их копировать !
Спасибо !

Отправлено: 15:09, 30-07-2010

 

Старожил


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

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


Предлагаю не решать "влоб" Ваш вопрос, а заменить его в соотвествии с описанием задачи и таким образов свести решение к тому, что уже обсуждалось в этой ветке:
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

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:06, 30-07-2010 | #2



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

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


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


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

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


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

Последний раз редактировалось deepred, 30-07-2010 в 16:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:21, 30-07-2010 | #3


Аватара для gora

Ушёл из жизни


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

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


Цитата Kobzar:
Задача сравнить ети два файла и получить из них разницу »
Код: Выделить весь код
@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%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:21, 30-07-2010 | #4


Аватара для Kobzar

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


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

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


спасибо ! тема закрыта !

Отправлено: 16:28, 30-07-2010 | #5


Аватара для gora

Ушёл из жизни


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

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


deepred, если уникальные строки будут в обоих файлах, то в Вашем варианте будут выведены уникальные строки только из второго файла.

Отправлено: 17:27, 30-07-2010 | #6


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


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

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


gora,

Цитата gora:
если уникальные строки будут в обоих файлах »
Это не соответсвует условию задачи
Цитата Kobzar:
сравнивать с предыдущим выводом этой команды или еталонным и получив список новых файлов »
но тем не менее....
Код: Выделить весь код
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)

Отправлено: 19:30, 30-07-2010 | #7


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


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

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


а если не различия, а схождения надо найти?

Отправлено: 19:30, 06-07-2012 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Побайтовое сравнение двух файлов korenza Скриптовые языки администрирования Windows 14 15-07-2018 17:18
Сравнение текстовых файлов Speedy Программное обеспечение Windows 9 30-03-2015 02:42
Delphi - [решено] Сравнение файлов. Snake750 Программирование и базы данных 6 15-03-2010 00:42
C/C++ - Создание списка файлов Albreht Программирование и базы данных 2 20-07-2009 01:17
Сравнение файлов Guest Программирование и базы данных 6 24-04-2004 04:47




 
Переход