Notwendigkeit und Durchführung eines Dateivergleichs über Kommandozeile?
Anfängerfrage zur Kontrolle von Kopieroperationen
Ich sichere mit robocopy und xcopy Daten quer übers Netz und verlasse mich auf die beiden Tools, dass Dateien auch bitgenau kopiert und abgespeichert werden.
Die ct empfiehlt windiff.exe und spricht dabei von einem bitgenauen Dateivergleich. In der Gruppe microsoft.public.de.german.windowsxp.sonstiges lese ich aber, dass windiff zwar ASCII-Dateien miteinander vergleichen kann, aber anscheinend sonst gar keinen bitgenauen Dateivergleich durchführt.
Auf http://support.microsoft.com/kb/159214/de entnehme ich auch nicht, dass windiff einen bitgenauen Dateivergleich für alle Arten von Dateien durchführt.
Des Weiteren werden die Tools comp.exe und xcomp.exe empfohlen.
Ich würde nach dem Kopiervorgang der Ordner und Dateien gerne noch einen Vergleich der jeweils gleichnamigen Dateien in beiden Ordnern (Quelle und Ziel) anstellen lassen (rekursiv in allen Ordnern und Unterordnern).
Fragen: bin ich neurotisch, oder ist das vernünftig?
Wie setze ich comp und/oder xcomp in einer Batchdatei unter Win XP ein, sodass das durchgeführt wird?
lg Christine
Ich sichere mit robocopy und xcopy Daten quer übers Netz und verlasse mich auf die beiden Tools, dass Dateien auch bitgenau kopiert und abgespeichert werden.
Die ct empfiehlt windiff.exe und spricht dabei von einem bitgenauen Dateivergleich. In der Gruppe microsoft.public.de.german.windowsxp.sonstiges lese ich aber, dass windiff zwar ASCII-Dateien miteinander vergleichen kann, aber anscheinend sonst gar keinen bitgenauen Dateivergleich durchführt.
Auf http://support.microsoft.com/kb/159214/de entnehme ich auch nicht, dass windiff einen bitgenauen Dateivergleich für alle Arten von Dateien durchführt.
Des Weiteren werden die Tools comp.exe und xcomp.exe empfohlen.
Ich würde nach dem Kopiervorgang der Ordner und Dateien gerne noch einen Vergleich der jeweils gleichnamigen Dateien in beiden Ordnern (Quelle und Ziel) anstellen lassen (rekursiv in allen Ordnern und Unterordnern).
Fragen: bin ich neurotisch, oder ist das vernünftig?
Wie setze ich comp und/oder xcomp in einer Batchdatei unter Win XP ein, sodass das durchgeführt wird?
lg Christine
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 61502
Url: https://administrator.de/contentid/61502
Ausgedruckt am: 20.11.2024 um 00:11 Uhr
13 Kommentare
Neuester Kommentar
Moin Grisu-Newbie,
Antwort: Ja, ein bissi schon.
Weil: XCopy/RoboCopy und Konsorten verwenden alle standardmäßig den Schalter /V für Verify, also die Überprüfung, ob Quelle und Ziel übereinstimmen.
Genauer gesagt, dieses Verhalten lässt sich auch überhaupt nicht mehr abwählen.
Wenn also ein xcopy'ren bei irgendeiner Datei nicht klappt, dann bekommst Du eine Fehlermeldung und vor allem einen Fehlercode <> 0.
Das könntest Du in Deinem Batch einbauen und (wie auch immer) reagieren.
Du könntest natürlich auch mit Comp.exe oder FC.exe die Dateien vergleichen - Beispiele dazu haben wir in Batch & Shell.
Aber so etwas ist IMHO nicht ein angemessenes Standardvorgehen nach einer XCopy/RoboCopy-Sicherung.
Wenn es wirklich ganz ganz ganz wichtige Daten sind, dann bist Du mit einem professionellen Sicherungstool besser bedient.
Für "mal meine MP3-Ordner auf Laufwerk D: oder den USB-Stick sichern", dafür würde ich keine Aktionen starten, die länger dauern als das Kopieren vorher.
Gruß
Biber
Fragen: bin ich neurotisch, oder ist das vernünftig?
Gegenfrage: meinst Du vielleicht "paranoid"?Antwort: Ja, ein bissi schon.
Weil: XCopy/RoboCopy und Konsorten verwenden alle standardmäßig den Schalter /V für Verify, also die Überprüfung, ob Quelle und Ziel übereinstimmen.
Genauer gesagt, dieses Verhalten lässt sich auch überhaupt nicht mehr abwählen.
Wenn also ein xcopy'ren bei irgendeiner Datei nicht klappt, dann bekommst Du eine Fehlermeldung und vor allem einen Fehlercode <> 0.
Das könntest Du in Deinem Batch einbauen und (wie auch immer) reagieren.
Du könntest natürlich auch mit Comp.exe oder FC.exe die Dateien vergleichen - Beispiele dazu haben wir in Batch & Shell.
Aber so etwas ist IMHO nicht ein angemessenes Standardvorgehen nach einer XCopy/RoboCopy-Sicherung.
Wenn es wirklich ganz ganz ganz wichtige Daten sind, dann bist Du mit einem professionellen Sicherungstool besser bedient.
Für "mal meine MP3-Ordner auf Laufwerk D: oder den USB-Stick sichern", dafür würde ich keine Aktionen starten, die länger dauern als das Kopieren vorher.
Gruß
Biber
Moin Grisu-Newbie,
stimmt es eigentlich, dass manche Frauen einen furchtbaren Dickschädel haben?
Hier wäre ein etwas allgemeinerer Abklatsch von bastlas Schnipsel aus dem anderen Thread.
Extra für Dich.. *gg
[ungetestete Skizze]
Nichtsdestotrotz halte ich den Aufwand für unnötig.
Das Feature "/verify" ist in Xcopy noch als Dummy-Parameter dabei, aber ist immer aktiv. Du kannst gar nicht sagen "/noverify".
Und in RoboCopy ist es konsequenterweise gar nicht mehr als Parameter aufgeführt, da hast Du Recht.
Ach ja, und was die Weisheiten der c't betrifft... nein, das Fass mach ich nicht auf jetzt. *kopfschüttel*
Vielleicht, wenn wir uns mal besser kennen oder nach dem dritten Becks...
Nur abstrakt: alle M$-whatever-Copy-Tools "prüfen" standardmäßig, ob sich die Quelldatei lesen und die Zieldatei schreiben lässt.
Was dann noch schiefgehen kann wäre, dass eine Datei in einen Buffer/einen Cache gelesen wurde,m dann im Hauptspeicher ein kleines Erdbeben ein paar Bytes durcheinanderschüttelt und leider nur dieser Mix auf den Zieldateiträger geschrieben wird.
Natürlich lässt sich dieses Risiko niemals zu 100% ausschließen, aber bei uns in Bremen passiert es eher selten.
Liebe Grüße zurück
Biber
stimmt es eigentlich, dass manche Frauen einen furchtbaren Dickschädel haben?
Hier wäre ein etwas allgemeinerer Abklatsch von bastlas Schnipsel aus dem anderen Thread.
Extra für Dich.. *gg
:: ------snipp DirCompare.bat
@echo off & setlocal
:: Parameter 1 Original-Rootverzeichnis (optional, Default = D:\temp)
:: Parameter 2 Kopie (optional, Default = G:;; kann auch G:\Backup\Juno2007 sein
:: identische Lw-Struktur Quelle/Ziel wird unterstellt)
Set "Ergebnis=%temp%\Ergebnis.txt"
Set "Fehlerlog%=%temp%\Fehler.txt"
Set "dirlist=%temp%\Dirlist.txt"
If [%1]== %0 D:\temp
If [%2}==[] %0 %1 G:
if exist %Ergebnis% del %Ergebnis%
if exist %FehlerLog% del %FehlerLog%
Dir /b /s A:-d %1\*.* >%dirlist%
for /f "delims=" %%i in (%dirlist%) do call :ProcessFile "%%~pnxi" %%~di "%~2"
REM hier evtl. Type %FehlerLog% & pause
goto :eof
:ProcessFile Parameter1: PfadUndDateinameQuell Parameter2 QuellLw Rarameter 2 ZielRoot
if not exist "%2\%~1" goto :Fehler
if not exist "%~3\%~1" goto :Fehler
fc /b "%2\%~1" "%~3\%~1" >nul || goto :Fehler
echo identisch %~1>>%Ergebnis%
goto :eof
:Fehler
echo Fehler %~1>>%Ergebnis%
echo Fehler %~1>>%Fehlerlog%
goto :eof
:: ------snapp DirCompare.bat
Nichtsdestotrotz halte ich den Aufwand für unnötig.
Das Feature "/verify" ist in Xcopy noch als Dummy-Parameter dabei, aber ist immer aktiv. Du kannst gar nicht sagen "/noverify".
Und in RoboCopy ist es konsequenterweise gar nicht mehr als Parameter aufgeführt, da hast Du Recht.
Ach ja, und was die Weisheiten der c't betrifft... nein, das Fass mach ich nicht auf jetzt. *kopfschüttel*
Vielleicht, wenn wir uns mal besser kennen oder nach dem dritten Becks...
Nur abstrakt: alle M$-whatever-Copy-Tools "prüfen" standardmäßig, ob sich die Quelldatei lesen und die Zieldatei schreiben lässt.
Was dann noch schiefgehen kann wäre, dass eine Datei in einen Buffer/einen Cache gelesen wurde,m dann im Hauptspeicher ein kleines Erdbeben ein paar Bytes durcheinanderschüttelt und leider nur dieser Mix auf den Zieldateiträger geschrieben wird.
Natürlich lässt sich dieses Risiko niemals zu 100% ausschließen, aber bei uns in Bremen passiert es eher selten.
Liebe Grüße zurück
Biber
Hallo Grisu-Newbie!
Da ich nun schon mal in diesem Thread Erwähnung gefunden habe, möchte ich auch etwas beitragen, etwa ein paar zusätzliche Anführungszeichen
Getestet ist's damit noch immer nicht ...
Die Anführungszeichen bei den Defaults "D:\temp" und "G:" sind für diese (derzeitigen) Pfade entbehrlich, allerdings schaden sie nicht, und wenn es doch einmal "D:\Nicht nur temp" werden sollte, werden sie richtig nützlich ...
Grüße
bastla
Da ich nun schon mal in diesem Thread Erwähnung gefunden habe, möchte ich auch etwas beitragen, etwa ein paar zusätzliche Anführungszeichen
:: ------snipp DirCompare.bat
@echo off & setlocal
:: Parameter 1 Original-Rootverzeichnis (optional, Default = D:\temp)
:: Parameter 2 Kopie (optional, Default = G:; kann auch G:\Backup\Juno2007 sein)
:: identische Lw-Struktur Quelle/Ziel wird unterstellt
Set "Ergebnis=%temp%\Ergebnis.txt"
Set "Fehlerlog%=%temp%\Fehler.txt"
Set "dirlist=%temp%\Dirlist.txt"
If [%1]== %0 "D:\temp"
If [%2]== %0 %1 "G:"
if exist "%Ergebnis%" del "%Ergebnis%"
if exist "%FehlerLog%" del "%FehlerLog%"
Dir /b /s /A:-d "%~1\*.*" >"%dirlist%"
for /f "usebackq delims=" %%i in ("%dirlist%") do call :ProcessFile "%%~pnxi" %%~di "%~2"
REM hier evtl. Type "%FehlerLog%" & pause
goto :eof
:ProcessFile
:: Parameter1: PfadUndDateinameQuell; Parameter2: QuellLw; Parameter 3: ZielRoot
if not exist "%2\%~1" goto :Fehler
if not exist "%~3\%~1" goto :Fehler
fc /b "%2\%~1" "%~3\%~1" >nul || goto :Fehler
echo identisch %~1>>"%Ergebnis%"
goto :eof
:Fehler
echo Fehler %~1>>"%Ergebnis%"
echo Fehler %~1>>"%Fehlerlog%"
goto :eof
:: ------snapp DirCompare.bat
Die Anführungszeichen bei den Defaults "D:\temp" und "G:" sind für diese (derzeitigen) Pfade entbehrlich, allerdings schaden sie nicht, und wenn es doch einmal "D:\Nicht nur temp" werden sollte, werden sie richtig nützlich ...
Grüße
bastla
Hallo Grisu-Newbie!
Ja, in Zeile 7 muss das "%" weg.
Grüße
bastla
Auch dir danke, *das* habe ich sogar gewusst mit dem Leerzeichen und den Anführungszeichen
Wird nicht wieder vorkommen ... Ja, in Zeile 7 muss das "%" weg.
Jedenfalls: wenn ich es weglasse, und ich starte das Programm, dann geht die Konsole zuerst auf, bleibt 2 Sekunden offen und schließt sich dann wieder.
Du solltest beim Testen von Batch-Files vorweg die Konsole öffnen und dann aus der Konsole starten - so kannst Du die Ausgaben bzw Fehlermeldungen besser sehen. Wenn Du dann noch in der ersten Zeile "echo on" verwendest, siehst Du noch mehr ...Leider habe ich nicht behirnt, was ich anstatt
:: Parameter1: PfadUndDateinameQuell; Parameter2: QuellLw; Parameter 3: ZielRoot
hinschreiben soll.
Die beiden ":" an Anfang der Zeile machen diese zum Kommentar - also alles oder nichts hinschreiben - wirkt sich nicht aus.:: Parameter1: PfadUndDateinameQuell; Parameter2: QuellLw; Parameter 3: ZielRoot
hinschreiben soll.
Grüße
bastla
Hallo Grisu-Newbie!
Da nur ein Kommentar, musst Du nicht "umsetzen" - die Zeile soll nur erklären, was oben bei
an das Unterprogramm übergeben bzw vom Unterprogramm übernommen wird, nämlich
Nicht "hinschreiben" musst Du auch deshalb, weil ja die angeführte "for"-Zeile die Aufgabe hat, eben diese (Teil-)Informationen zu ermitteln.
Zur Kontrolle kannst Du nach der Zeile ":ProcessFile" ein
einfügen (das $ nur als optisches Trennzeichen) und Dir anzeigen lassen, was jeweils übergeben wird.
Nur zur Sicherheit: Die Defaultwerte "D:\temp" und "G:" für Quelle (Originaldateien) und Ziel des Backups treffen bei Dir zu? Falls nein, in den "If"-Zeilen (9 und 10) anpassen oder von der Kommandozeile mit
starten.
Grüße
bastla
Da nur ein Kommentar, musst Du nicht "umsetzen" - die Zeile soll nur erklären, was oben bei
for /f "usebackq delims=" %%i in ("%dirlist%") do call :ProcessFile <b>"%%~pnxi" %%~di "%~2"</b>
- als %1: "PfadUndDateinameQuelle"
- als %2: QuellLw
- als %3: "ZielRoot"
Nicht "hinschreiben" musst Du auch deshalb, weil ja die angeführte "for"-Zeile die Aufgabe hat, eben diese (Teil-)Informationen zu ermitteln.
Zur Kontrolle kannst Du nach der Zeile ":ProcessFile" ein
echo %1 $ %2 $ %3
-- und so funktioniert es nicht.
... bedeutet etwas ausführlicher?Nur zur Sicherheit: Die Defaultwerte "D:\temp" und "G:" für Quelle (Originaldateien) und Ziel des Backups treffen bei Dir zu? Falls nein, in den "If"-Zeilen (9 und 10) anpassen oder von der Kommandozeile mit
DirCompare "E:\Meine Quelle" "F:\MeinZiel"
Grüße
bastla
Hallo Grisu-Newbie!
(oder, wenn keine Leerzeichen in den Pfaden vorhanden sind, ganz weglassen). *Jetzt hätte ich es beinahe wieder getan.*
solltest Du sehr wohl eine Wirkung sehen können, während die Datei "%temp%\Fehler.txt" möglichst nicht zu finden sein sollte. Diese Pfade/Dateinamen kannst Du in den ersten beiden "Set"-Zeilen anpassen.
Grüße
bastla
D:\>DirCompare "D:\data" E:\data"
Anführungszeichen solltest Du in den allermeisten Fällen (das ist einer davon ) paarweise verwenden Das Skript bewirkt bei mir nichts.
Mittype "%temp%\Ergebnis.txt"
Grüße
bastla
Hallo Grisu-Newbie!
"xcomp" ist mir zwar nicht bekannt, aber vielleicht noch eine alternative Vorgangsweise: Mit Checksummenprogrammen (zB nach MD5, für Commandline etwa http://www.pc-tools.net/win32/md5sums/ oder http://www.fourmilab.ch/md5/, mit GUI beispielsweise http://www.md5summer.org/) hättest Du eine weitere Möglichkeit, einen Vergleich durchzuführen.
Grüße
bastla
"xcomp" ist mir zwar nicht bekannt, aber vielleicht noch eine alternative Vorgangsweise: Mit Checksummenprogrammen (zB nach MD5, für Commandline etwa http://www.pc-tools.net/win32/md5sums/ oder http://www.fourmilab.ch/md5/, mit GUI beispielsweise http://www.md5summer.org/) hättest Du eine weitere Möglichkeit, einen Vergleich durchzuführen.
Grüße
bastla