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

Ausgedruckt am: 10.05.2024 um 13:05 Uhr

Mitglied: Penny.Cilin
Lösung Penny.Cilin 03.11.2016 um 20:26:09 Uhr
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
Mitglied: Pjordorf
Pjordorf 03.11.2016 um 20:29:21 Uhr
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
Mitglied: Rotnasenkater
Rotnasenkater 03.11.2016 um 21:33:45 Uhr
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...
Mitglied: Rotnasenkater
Rotnasenkater 03.11.2016 um 21:36:38 Uhr
Goto Top
Das isses!!! Vielen Dank!
Mitglied: 77559
Lösung 77559 04.11.2016 um 01:38:07 Uhr
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"  
Mitglied: Endoro
Endoro 04.11.2016 um 06:55:48 Uhr
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 04.11.2016 aktualisiert um 07:47:21 Uhr
Goto Top
Und hier noch ein Powershell Einzeiler
gci 'd:\videos' -recurse | ?{!$_.PSISContainer} | group Name | ?{$_.Count -gt 1} | %{$_.Group.Fullname}  
Gruß
Mitglied: Penny.Cilin
Penny.Cilin 04.11.2016 um 09:59:33 Uhr
Goto Top
Zitat von @Rotnasenkater:

Das isses!!! Vielen Dank!
Was isses?????
Mitglied: Rotnasenkater
Rotnasenkater 04.11.2016 um 15:13:08 Uhr
Goto Top
Winmerge - das war erstmal die Lösung...