zensbert
Goto Top

Wert aus TXT exportieren, Werte vergleichen

Hi,
ich habe 2 TXTs mit MD5-Hashwerten (vorher / nachher), beide mit gleichem aufbau (TAB-getrennt).. sieht ungefähr so aus:

Dateiname [TAB] MD5-Wert [TAB] SHA1Wert [TAB] CRC32 [TAB] Dateiname m. Pfad
Beispiel.exe 75dccaba412938e84a53a3ee23f64cc4 a98bc8260f2fb2ecf6a4ae0d7e9eb44d3e96f4b12ecd4732 98210de D:\Software\Beispiel.exe

nun die Kernfrage, wie kriege ich es hin, dass ich am Ende eine Textdatei ausgeworfen bekomme, die nur die unterschiedlichen Hashwerte mir ausspuckt, bzw. da reicht mir auch schon die Dateinamen in ner TXT.. da die Dateinamen gleich sind, muss man ja wohl den Dateinamen aus der TXT auslesen, den dazugehörigen MD5-Wert mit dem Wert aus der "Nachher-TXT" vergleichen und bei Änderung den Dateinamen m. Pfad ausspucken..

Jemand ne idee wie man sowas vergleichen kann?

Danke im Voraus,
Thomas

Content-ID: 175359

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

Ausgedruckt am: 24.11.2024 um 16:11 Uhr

bastla
bastla 27.10.2011 um 00:30:57 Uhr
Goto Top
Hallo zensbert!

Müssten nicht alle Hash-Werte (also nicht nur MD5) und damit letztlich die gesamte Zeile gleich sein?

Außerdem: Können die Dateinamen auch Leerzeichen enthalten?

Grüße
bastla
zensbert
zensbert 27.10.2011 um 00:40:32 Uhr
Goto Top
Hi Bastla!
Ich tausche dort die Dateien öfters aus, ersetze sie aber mit den gleichen Dateinamen.. dennoch will ich dann automatisiert anderen Admins ne mail zukommen lassen dass ich die Datei Beispiel.exe und Beispiel2.exe ausgetauscht bzw. aktualisiert habe, vll. mach ich da auch noch ne automatische Update-Routine raus.. demnach ist wenn die Zeile dann an nur einer Position variiert von einem Update der Datei auszugehen... und ja; die Dateien können auch Leerzeichen enthalten. Leider kann ich aber auch nicht ausschließen ob dort ggf. mal noch beim nächsten "Update" eine Datei dazukommt und damit die Reihenfolge der TXT durcheinander bringt..

Aber soweit schonmal danke!

Grüße!
bastla
bastla 27.10.2011 um 00:50:43 Uhr
Goto Top
Hallo zensbert!

Im einfachsten Fall (alle Dateien der "Nachher.txt", welche in "Vorher.txt" einen anderen MD5-Wert haben oder nicht enthalten sind) könnte das so gehen:
@echo off & setlocal
set "Vorher=D:\Vorher.txt"  
set "Nachher=D:\Nachher.txt"  
set "Diff=D:\Differenz.txt"  
set "Delim=	"  

del "%Diff%" 2>nul  
for /f "usebackq delims=" %%i in ("%Nachher%") do for /f "tokens=1-5 delims=%Delim%" %%a in ("%%i") do findstr /b /c:"%%a%Delim%%%b" "%Vorher%">nul||>>"%Diff%" echo %%i  
Bitte beachten: Als %Delim% wird in Zeile 5 ein TAB zugewiesen ...

Eigentlich hatte ich einen direkten Vergleich der gesamten Zeilen (mit findstr /i /v /g:"%Nachher%" "%Vorher%" ) vorgehabt, was aber an einem "zu langen Suchstring" scheitert ...

Wenn es übrigens genügt, tatsächlich nur die Dateinamen (mit Pfad) auszugeben, ließe sich das noch auf
@echo off & setlocal
set "Vorher=Vorher.txt"  
set "Nachher=Nachher.txt"  
set "Diff=Differenz.txt"  
set "Delim=	"  

del "%Diff%" 2>nul  
for /f "usebackq tokens=1-5 delims=%Delim%" %%a in ("%Nachher%") do findstr /b /c:"%%a%Delim%%%b" "%Vorher%">nul||>>"%Diff%" echo %%e  
reduzieren ...

Grüße
bastla
zensbert
zensbert 27.10.2011 um 01:20:21 Uhr
Goto Top
ICH LIEBE DICH! Tausend Dank! Damit hasde mir die schlaflose Nacht verkürzt... Wirklich vielen Dank, klappt super!
Grüße,
Thomas
zensbert
zensbert 02.11.2011 um 09:23:57 Uhr
Goto Top
Hi, um mein Glück perfekt zu machen wäre es perfekt wenn ich in der Log-Datei in jeder Zeile eine gewisse Anzahl an Zeichen einfach entfernen könnte, sodass da statt
"D:\Software\Skript\Setup\Beispiel.exe" z.B. nur "Setup\Beispiel.exe" steht, ist dass ein Problem dass dann im Pfad eventuell auch Leerzeichen enthalten sind? Geht das dass ich z.B. in jeder Zeile der Log dann die ersten XX Zeichen weglösche?
Tausend Dank im voraus!

Grüße,
Thomas
bastla
bastla 02.11.2011 um 15:06:03 Uhr
Goto Top
Hallo zensbert!
Geht das dass ich z.B. in jeder Zeile der Log dann die ersten XX Zeichen weglösche?
Wäre es, wenn ich Dich richtig verstanden habe, nicht sinnvoller, den Teil des Pfades (also etwa "D:\Software\Skript\") anzugeben, der entfernt werden soll? In diesem Fall (weiterhin ungetestet) etwa so:
@echo off & setlocal
set "Vorher=Vorher.txt"  
set "Nachher=Nachher.txt"  
set "Diff=Differenz.txt"  
set "Delim=	"  
set "Basispfad=D:\Software\Skript\"  

del "%Diff%" 2>nul  
for /f "usebackq tokens=1-5 delims=%Delim%" %%a in ("%Nachher%") do findstr /b /c:"%%a%Delim%%%b" "%Vorher%">nul||(set "Pfad=%%e" & call :ProcessLine)  
goto :eof

:ProcessLine
setlocal enabledelayedexpansion
>>"%Diff%" echo !Pfad:%Basispfad%=!  
REM um 19 Zeichen am Anfang wegzulassen alternativ:
REM >>"%Diff%" echo !Pfad:~19!  
endlocal
goto :eof
Grüße
bastla
zensbert
zensbert 02.11.2011 um 21:12:29 Uhr
Goto Top
and again, many thanks.. hab dass dann auch sogenutzt, dass direkt der komplette Pfad rausfliegt, den ich nicht drinhaben will..
danke danke danke danke!

Bye, Thomas