Войти

Показать полную графическую версию : Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый


mrusklon
31-10-2019, 16:19
Делаю я операции с картинками, jpg , мониторю папку где лежат картинки , добавляю пути и названия всех файлов в log.txt и уже дальше спокойно обрабатываю
но папку с картинками часто невольно засирает да и старые картинки по необходимости остаются ,
собственно вопрос: как добавить в log.txt только те картинки которых небыло ранее?

Как я это вижу:
делаем 2 лог файла, log.txt и newlog.txt
log.txt - все что было записано ранее
в newlog.txt добавляется все что есть в папке на данный момент, затем сравнивается с log.txt , всю разницу записывает в result.txt

такое возможно? Как это сделать подскажите?

p.s. к примеру вот такое содержимое log.txt
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\setting_back.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\shuffle_down.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\shuffle_over.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\shuffle_up.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\tile16.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\tile_bezel.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\tile_drop_shadow.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\timer_down.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\timer_over.png
c:\Program Files\Windows Sidebar\Gadgets\PicturePuzzle.Gadget\Images\timer_up.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\drag.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\icon.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\images\buttonDown_Off.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\images\buttonDown_On.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\images\buttonUp_Off.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\images\buttonUp_On.png
c:\Program Files\Windows Sidebar\Gadgets\RSSFeeds.Gadget\images\flyoutBack.png

DJ Mogarych
31-10-2019, 16:29
Powershell:
(compare (gc D:\temp\log.txt) (gc D:\temp\newlog.txt)).inputobject |Out-File D:\temp\result.txt
Вопрос только в том, всегда ли в newlog.txt будет больше строк, чем в log.txt, потому что в примере выше будет записываться любая разница между файлами.

Если нужно, чтобы добавлялись только те, которые есть в newlog.txt, но нет в log.txt, но не наоборот, тогда так:
((compare (gc D:\temp\log.txt) (gc D:\temp\newlog.txt)).where{$_.SideIndicator -eq '=>'}).inputobject |Out-File D:\temp\result.txt

mrusklon
31-10-2019, 16:38
точно, надо просто обновлять log.txt , выходит удаляем log.txt , а newlog.txt переименовываем в log.txt , выходит у нас будет всегда "большой" файл для сравнения с малым
или я не то понял? Или может оптимизировать можно как то?

DJ Mogarych
31-10-2019, 16:43
В первом варианте запишется любая разница, любые строки, уникальные для обоих файлов.
Во втором примере запишутся только уникальные строки, которые содержатся в newlog.txt.

mrusklon
31-10-2019, 16:46
что то не работает сам батник, что я делаю не так?
создал cmd.bat ,
поместил в него
@echo off
((compare (gc D:\temp\log.txt) (gc D:\temp\newlog.txt)).where{$_.SideIndicator -eq '=>'}).inputobject |Out-File D:\temp\result.txt
pause

но окно не запускается даже (или настолько быстро что не видно) , все файлы созданы по указанному пути , log и newlog наполнил небольшим содержимым для теста

DJ Mogarych
31-10-2019, 16:52
надо создать cmd.ps1 и запускать его по правой кнопке мышки -> выполнить в Powershell.
@echo off надо убрать

Или сделать такой "батник":
powershell -noprofile -command "((compare (gc D:\temp\log.txt) (gc D:\temp\newlog.txt)).where{$_.SideIndicator -eq '=>'}).inputobject |Out-File D:\temp\result.txt"

mrusklon
31-10-2019, 17:05
понял , все фунциклирует , дальше разберусь сам , спасибо!




© OSzone.net 2001-2012