Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zwei Dateien vergleichen (z.B. auf Größe) nach erfolgtem Copy

Frage Entwicklung Batch & Shell

Mitglied: icsat

icsat (Level 1) - Jetzt verbinden

27.01.2006, aktualisiert 02.02.2007, 10112 Aufrufe, 12 Kommentare

Zum Ausführungszeitpunkt des Copy Komandos kann ich nicht sicher sein, dass die Quelldatei bereits vollständig vorhanden ist, wie kann ich prüfen ob die Quelldatei sich nach dem Copy noch verändert hat?

Hallo,

ich bekomme mehrere Dateien auf einem Server mittels openFT zur Verfügung gestellt und mit der zuletzt gesendete Datei wird ein Verarbeitungsscript angestoßen. Im Verarbeitungsscript werden die Dateien mittels copy an einen anderen Ort kopiert.

Nun hat sich in der Praxis herausgestellt, dass eine Datei gelegentlich noch nicht vollständig vorhande ist, wenn der Copy anläuft und somit nur zum Teil (wenn auch zum größten) kopiert wird. Grund dafür ist die Tatsache, dass die "Problemdatei" mit ca. 1GB deutlich größer ist als die letzte Datei mit 2kb und der openFT wohl nicht so sauber läuft, dass die letzte Datei erst gesendet wird wenn die anderen bereits vollständig übertragen wurden.

Da ich an den vorgelagerten Abläufen (Jobs / openFT / etc.) erst einmal nichts ändern möchte bzw. nur mit erheblich Aufwand etwas ändern kann würde ich gerne wissen ob jemand eine Möglichkeit kennt nach dem Copy die Dateien ohne große Schwierigkeiten zu vergleichen.

Ein Vergleich der Dateigröße würde meiner Meinung nach vollkommen ausreichen, der Inhalt müßte nicht geprüft werden.

Ich bin mir nicht sicher, ob dieses einfach mit dem Schalter /v erreicht werden kann, denn der Copy ist zu dem betroffen Zeitpunkt ja ohne Fehler und vollständig gelaufen (ERRORLEVEL =0), hat hierzu jemand Erfahrungen?

Oder besteht die Möglichkeit einen exclusiven Copy durchzuführen? Der müste doch fehlschlagen, da noch in die Quelldatei geschrieben wird?

Mit freundlichen Grüßen

André
Mitglied: stagatto
27.01.2006 um 13:43 Uhr
Um zwei Dateien zu vergleichen fällt mir spontan das Unix-Tool diff ein.

Damit können Text- und Binärdateien verglichen werden, bei einer Textdatei werden die Unterschiede ausgegeben, bei einer Binärdatei lediglich ob unterschiede bestehen.

Für Windows stellt cygwin eine entsprechende Toolsammlung parat. Habe aber leider keinen aktuellen Downloadlink.

stagatto
Bitte warten ..
Mitglied: derCaptain
27.01.2006 um 13:45 Uhr
Bitte warten ..
Mitglied: stagatto
27.01.2006 um 13:48 Uhr
... hab den Link gefunden und unter Links hinzugefügt:

http://unxutils.sourceforge.net/

stagatto
Bitte warten ..
Mitglied: icsat
27.01.2006 um 15:19 Uhr
Danke, ich würde jedoch am liebsten ohne zusätzliche Tools auskommen.
Bitte warten ..
Mitglied: icsat
27.01.2006 um 15:55 Uhr
Danke,

eigentlich war der Tip ganz gut.
Die Bewertung hatte ich leider schon abgegeben nachdem ich es auf meinem Windows NT Client probiert habe und es nicht funktioniert hat, da der FOR dort kein %%~zI unterstützt. Auf dem 2003 Server scheint dieses jedoch der Fall zu sein, ich bekomme aber trotzdem kein Ergebnis, denn %%~zI scheint leer zu sein.
Hast Du da eine Idee?
Bitte warten ..
Mitglied: icsat
27.01.2006 um 17:17 Uhr
Hallo derCaptain,

noch mal Danke für Deinen Tip.

Wer lesen kann ist klar im Vorteil! Nachdem ich die Anführungszeichen in der Klammer weggenommen habe hat es auch mit der Ausgabe funktioniert. Das Problem mit der Lösung mittels "for /R %PATH% ..." ist jedoch die Tatsache, dass ab %PATH% in dem angegebenen Verzeichnis und allen unterverzeichnissen nach der Datei gesucht wird, es also zu vielen Ergebnissen kommt wobei nur das erste Ergebnis einen brauchbaren Wert hat.

Dennoch hat Dein Tip mich auf meine Problemlösung gebracht:
for /D %%I in ("%DATEI1%") do for /D %%J in ("%DATEI2%") do if %%~zI == %%~zJ echo Die Dateien sind gleich groß! > %LOG%
for /D %%I in ("%DATEI1%") do for /D %%J in ("%DATEI2%") do if not %%~zI == %%~zJ echo Die Dateien sind nicht gleich groß! > %LOG%

Mit freundlichen Grüßen André
Bitte warten ..
Mitglied: Biber
27.01.2006 um 19:03 Uhr
Moin icsat,

nur als Fußnote dazu:
a) Du kannst lange Zeilen im Batch "dokumentiert" oder "undokumentiert" trennen:

"dokumentiert" durch "Klammerung" nach dem "...DO":
for /D %%I in ("%DATEI1%") do (
for /D %%J in ("%DATEI2%") do (
if %%~zI == %%~zJ echo Die Dateien sind gleich groß! > %LOG%
))

"undokumentiert": durch Eingabe von Caret ("^") und RETURN direkt dahinter. An beliebiger (Leer-) Stelle.

b) Etwas sinnvoller wird das LogFile, wenn Du den Dateinamen mit in die LogZeile schreibst.
Und mit ">>" das Logfile weiter- statt mit ">" überschreibst
... echo Die Dateien %%~nI sind nicht gleich groß! >> %LOG%

HTH Biber
Bitte warten ..
Mitglied: icsat
28.01.2006 um 13:13 Uhr
Hallo Biber,

zu a)
ist mir bekannt, ist wirklich 'ne hübsche Sache und meines Wissens durch MS nicht wirklich dokumentiert.

zu b)
die beiden Zeilen sollten nur zeigen, wie ich den Vergleich gelöst habe. Es ist mir schon klar, dass es wenig Sinn macht ein Log-Datei mit jedem Eintrag neu anzulegen

Gruß André
Bitte warten ..
Mitglied: Biber
28.01.2006 um 13:27 Uhr
Moin André,

>>zu b) die beiden Zeilen sollten nur zeigen, wie ich den Vergleich gelöst habe.
>>Es ist mir schon klar, dass es wenig Sinn macht ein Log-Datei mit jedem Eintrag neu anzulegen


...ich habe auch gestern lange überlegt, ob ich Punkt b) dazuschreibe... dachte mir schon, dass das nur ein Beispiel sein sollte.
Der Hinweis war mehr gedacht für nachfolgende Mitleser.

Also bitte nicht als persönlich gemeinte Unterstellung auffassen - war nicht so gemeint.

Schönes Wochenende
Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: fpschultze
01.02.2006 um 00:52 Uhr
Hallo André,

vielleicht ist Robocopys Monitor-Funktion etwas für Dich. Es gibt zwei Parameter:

/MON:n = MONitor source; run again when more than n changes seen.
/MOT:m = MOnitor source; run again in m minutes Time, if changed.

Viele Grüße
Peter
Bitte warten ..
Mitglied: icsat
01.02.2006 um 06:53 Uhr
Hallo Peter,

Robocopy habe ich auch schon gesehen, mich aber nicht weiter damit befasst.
Die o.g. Lösung funktioniert für meine Zwecke hoffentlich ausreichend.

Zu der Robocopy Lösung würde mich interessieren
a) läuft ein Script hinter dem Befehl weiter und der Copy wird unabhängig vom Script wiederholt oder steht das Script m Minuten?
b) würde der Robocopy nach dem zweiten mal erneut nach m Minuten auf Veränderungen prüfen?

Gruß André
Bitte warten ..
Mitglied: icsat
02.02.2007 um 19:03 Uhr
Hallo,

die oben angegebene Lösung funktioniert von der Sache her sehr gut hat mein eigentliche Problem aber nicht gelöst, da der Fehler weiterhin aufgetreten ist.

Falls es jemanden interessiert:
Die Ursache lag in einem Fehler im openFT Job. Die Dateien die Übertragen werden setzen alle ein Flag sobald sie vollständig übertragen wurden und die letzte Datei, die auch das Verarbeitungsscript startet wird erst übertragen wenn all Flags gesetzt sind. Leider war das Flag für die "Problemdatei" immer gesetzt, so dass die Verarbeitung auch gestartet wurde wenn Datei noch gar nicht übertragen war.

Ich werde die Frage mal als gelöst kennzeichen.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...