Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый (http://forum.oszone.net/showthread.php?t=342745)

mrusklon 31-10-2019 16:19 2894175

Как сравнить разницу в двух текстовых документах и вывести разницу в новый текстовый
 
Делаю я операции с картинками, 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 2894176

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 2894178

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

DJ Mogarych 31-10-2019 16:43 2894179

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

mrusklon 31-10-2019 16:46 2894180

что то не работает сам батник, что я делаю не так?
создал 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 2894181

надо создать 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 2894182

понял , все фунциклирует , дальше разберусь сам , спасибо!


Время: 23:26.

Время: 23:26.
© OSzone.net 2001-