rotnasenkater
Goto Top

Dateiinhalte vergleichen - Gemeinsamkeiten anzeigen

Servus, liebe Gemeinde!

Ich suche ein Programm oder ein Batchfile, welches 2 Textdateien miteinander vergleicht und dann anzeigt, welche Zeichenkette in beiden vorhanden ist. Hintergrund: ich habe meine Filmsammlung auf mehrere Festplatten verteilt und bin mir sicher, daß ich manche Filme doppelt habe. Das möchte ich nur rausfinden und die doppelten löschen. Wollte dazu per

dir /b/s >inhalt1.txt
die Dateien in eine Textdatei auf dem jeweiligen Laufwerk schreiben lassen und diese Datein dann vergleichen.

Oder gehe ich die ganze Sache verkehrt an und es gibt eine viel einfacheren Weg?

Danke im voraus!

Content-Key: 319915

Url: https://administrator.de/contentid/319915

Printed on: April 24, 2024 at 17:04 o'clock

Member: Penny.Cilin
Solution Penny.Cilin Nov 03, 2016 at 19:26:09 (UTC)
Goto Top
Hallo 'n Abend,

Winmerge ist Dein Freund. Es gibt auch noch andere Tools.
Ich nutze jedenfalls Winmerge. Das kann übrigens auch Verzeichnisse vergleichen.


Gruss Penny
Member: Pjordorf
Pjordorf Nov 03, 2016 at 19:29:21 (UTC)
Goto Top
Hallo,

Zitat von @Rotnasenkater:
Ich suche ein Programm oder ein Batchfile, welches 2 Textdateien miteinander vergleicht und dann anzeigt, welche Zeichenkette in beiden vorhanden ist
Schau dir fc mal an. Ein FC /? sagt dir mehr und anfangen tust du mit FC Datei1 Datei2 >>Vergleich.txt

Gruß,
Peter
Member: Rotnasenkater
Rotnasenkater Nov 03, 2016 at 20:33:45 (UTC)
Goto Top
Danke für die Antwort, aber "fc" bringt nichts, da ja die beiden Files unterschiedlich sind. Dass weiß ich ja - ich will aber wissen, welcher Dateinamen in beiden Files vorkommt...
Member: Rotnasenkater
Rotnasenkater Nov 03, 2016 at 20:36:38 (UTC)
Goto Top
Das isses!!! Vielen Dank!
Mitglied: 77559
Solution 77559 Nov 04, 2016 at 00:38:07 (UTC)
Goto Top
Hallo Rotnasenkater,
hatte schon angefangen zu antworten daß das nicht so einfach ist.
Und meine eigene Batch nochmal angesehen und überarbeitet.
Sie ist allerdings auch auf mein THC-Archiv eingestellt das den Dateinamen den Sender und Datum-Zeitstempel anhängt.
Die Variablen am Anfang sind hoffentlich selbsterklärend, sonst bitte nachfragen.
Ausgabe ist eine große Textdatei sortiert nach dem Dateinamen ohne erw. und ohne den Zeitstempel.

Hier die Batchdatei:
:: Videos_Enum.cmd ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@Echo off&Setlocal
Set "Log=V:\Videos_All"  
Set Trees="V:\Video\" "V:\Video.ts\"  
Set "Extensions=*.ts *.mp4 *.mpeg *.mpg *.m2v *.xml"  
Set "Exclude=_Video2Brain Oban Avatar _bak index --Genres"  
:: Don't change below this line unless you know what you do 
chcp 1252 >NUL
Set "Space=                                            "  
Set "Space=%Space%                                     "  
Set "RegEx=^20[01][0-9]-[0-1][0-9]-[0-3][0-9]."  
Set "RegEx=%RegEx%[0-2][0-9]-[0-5][0-9]-[0-5][0-9]$"  
Set Cnt=100000
Set "Head=#Filename_______________________________________________________"  
Set "Head=%Head%________________ .Ext THC_Record_DateTime File__Date__Time"  
Set "Head=%Head% FileSize_Byte Drive_Path_Name_Ext"  
Echo:%Head% >"%Log%.txt"  

For %%A in (%Trees%) do Call :ProcTree %%A
:: Sort
Sort "%Log%.txt" > "%Log%.Sort.txt"   
:: Edit/View LogFile
Start "" Notepad++.exe "%Log%.Sort.txt"  
::Call txp.cmd "%Log%.Sort.txt" 
Goto :eof

:ProcTree
Pushd %1
Echo %Date% %Time:~0,8% Processing tree: %CD%
For /F "Delims=" %%V in (  
  'Dir /B/S/A-D/ON %Extensions%^|Findstr /V /i "%Exclude%"'  
    ) Do Call :AddFile "%%~fV"  
Popd
Goto :Eof

:AddFile
Set "Name=%~n1"  
Set /a Cnt+=1
:: just for not getting bored
If "%~dp1" NEQ "%PrevDir%" Echo %Date% %Time:~0,8% %Cnt:~-5% Proc. Dir: %~dp1  
Set "PrevDir=%~dp1"  
:: If THC Recording cut last 19 (yyyy-MM-dd hh-nn-ss)
Set "THCdt=%Name:~-19%"  
Echo:%THCdt%|Findstr "%RegEx%" >NUL 2>&1  
If ErrorLevel 1 (
  Set "THCdt=!Space:~-19!"  
  Set "Name=%Name%%Space%"  
) Else (
  Set "Name=!Name:~0,-19!%Space%"  
)
Set "Ext=%~x1     "  
Set "FileDT=%~t1 "  
Set "FSize=               %~z1"  
Set "Line=%Name:~0,81%%Ext:~0,5%%THCdt% %FileDT%%FSize:~-13%"  
:: Remove some poison chars from line
Set "Line=%Line:&=^&%"  
>>"%Log%.txt" Echo.%Line% %1  
Goto :Eof

Hier ein Ausschnitt des cmd Fensters
2016-11-04  1:25:17 Processing tree: V:\Video
2016-11-04  1:26:01 00001 Proc. Dir: V:\Video\
2016-11-04  1:26:29 00250 Proc. Dir: V:\Video\Action\
2016-11-04  1:26:53 00434 Proc. Dir: V:\Video\Krimi\
2016-11-04  1:26:54 00440 Proc. Dir: V:\Video\Fernsehfilm\
2016-11-04  1:26:56 00460 Proc. Dir: V:\Video\Serien\
2016-11-04  1:26:57 00472 Proc. Dir: V:\Video\_Familie\

Hier ein Ausschnitt der Log-Datei mit Dublette "2 Fast 2 Furious"
#Filename_______________________________________________________________________ .Ext THC_Record_DateTime File__Date__Time FileSize_Byte Drive_Path_Name_Ext 
2 Fast 2 Furious - VOX                                                           .mpg 2010-03-18 20-15-00 2010-03-18 20:15    3043917824 "V:\Video\Action\2 Fast 2 Furious - VOX 2010-03-18 20-15-00.mpg"  
2 Fast 2 Furious - VOX                                                           .mpg 2010-03-18 20-15-00 2010-03-18 20:15    3043917824 "V:\Video\Video\Action\2 Fast 2 Furious - VOX 2010-03-18 20-15-00.mpg"  
2 Fast 2 Furious - VOX                                                           .xml 2010-03-18 20-15-00 2010-06-30 15:49          1159 "V:\Video\Action\2 Fast 2 Furious - VOX 2010-03-18 20-15-00.xml"  
2 Fast 2 Furious - VOX                                                           .xml 2010-03-18 20-15-00 2010-06-30 15:49          1159 "V:\Video\Video\Action\2 Fast 2 Furious - VOX 2010-03-18 20-15-00.xml"  
Member: Endoro
Endoro Nov 04, 2016 at 05:55:48 (UTC)
Goto Top
Hey,

noch eine Variante:
@echo off &setlocal disabledelayedexpansion
for /f "delims=" %%a in ('dir /b/s/a-d D:\* E:\*') do (  
	set "\%%~nxa" 2>nul | find /i "\%%~nxa" >nul && (  
		for /f "tokens=1,2delims==>" %%b in ('set ">" 2^>nul ^| find /i \"%%~nxa>"') do echo %%~b  
		echo %%~a
	) || (
		set "\%%~nxa\=7"  
		set ">%%~a>=7"  
	)
)

Gruß, Endoro
Mitglied: 131381
131381 Nov 04, 2016 updated at 06:47:21 (UTC)
Goto Top
Und hier noch ein Powershell Einzeiler
gci 'd:\videos' -recurse | ?{!$_.PSISContainer} | group Name | ?{$_.Count -gt 1} | %{$_.Group.Fullname}  
Gruß
Member: Penny.Cilin
Penny.Cilin Nov 04, 2016 at 08:59:33 (UTC)
Goto Top
Zitat von @Rotnasenkater:

Das isses!!! Vielen Dank!
Was isses?????
Member: Rotnasenkater
Rotnasenkater Nov 04, 2016 at 14:13:08 (UTC)
Goto Top
Winmerge - das war erstmal die Lösung...