CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Ответить
Аватара пользователя
mrusklon

CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Сообщение mrusklon »

Делаю я операции с картинками, 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

Re: CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Сообщение DJ Mogarych »

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

Re: CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Сообщение mrusklon »

точно, надо просто обновлять log.txt , выходит удаляем log.txt , а newlog.txt переименовываем в log.txt , выходит у нас будет всегда "большой" файл для сравнения с малым

или я не то понял? Или может оптимизировать можно как то?
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Сообщение DJ Mogarych »

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

Во втором примере запишутся только уникальные строки, которые содержатся в newlog.txt.
Аватара пользователя
mrusklon

Re: CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Сообщение mrusklon »

что то не работает сам батник, что я делаю не так?

создал 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

Re: CMD/BAT - Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый

Сообщение DJ Mogarych »

надо создать 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"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»