nemthor
Goto Top

Datei überprüfen, vergleichen, löschen und kopieren

Hallo zusammen,

hab ein kleines Problem. Ich hab einen Ordner, indem immer akteulle Datein gespeichert werden. Die Dateien möchte ich in einen neuen Ordner kopieren, sobald neue erzeugt worden sind.

Ich hab es soweit hinbekommen, dass in dem orignal Ordner die Datei gesucht wird und kopiert und im zweiten die Daten vorher gelöscht werden. Mein Code sieht so aus:
:Start
Del /S /Q "C:\Daten\NeuerOrdner\test"   
xcopy C:\Daten\NeuerOrdner\over_m*.* C:\Daten\NeuerOrdner\test
ping -n 30 localhost >NUL
GOTO Start
funktioniert auch, nur ich möchte es so in der Art erweitern:
:Start

Ist im Ordner Test bereits die aktuelle Datei erhalten springe zu "BOX 2"  
Ist die Datei nicht identisch springe zu "BOX 1"  

:box1
echo Neue Datei...
Del /S /Q "C:\Daten\NeuerOrdner\test"   
xcopy C:\Daten\NeuerOrdner\over_m*.* C:\Daten\NeuerOrdner\test


:box2
ping -n 20 localhost >NUL
GOTO Start

Könnte mir da jemand behilfich sein?
Wär super.

Danke.
Gruß

Content-Key: 126124

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: bastla
bastla Sep 30, 2009 at 12:29:12 (UTC)
Goto Top
Hallo Nemthor!

Du erwähnst immer nur eine Datei, daher nehme ich an, dass es sich tatsächlich nur um eine Datei (aber mit unterschiedlichem Namen) in den beiden Ordnern handelt. Auf Basis dieser Annahme könnte das (ungetestet) so gehen:
:Start
for %%i in ("C:\Daten\NeuerOrdner\over_m*.*") do set "Neu=%%i"  
for %%i in ("C:\Daten\NeuerOrdner\test") do set "Alt=%%i"  
fc /b "%Neu%" "%Alt%">nul && goto :box2  

echo Neue Datei...
del "%Alt%"   
copy "%Neu%" C:\Daten\NeuerOrdner\test  

:box2
ping -n 20 localhost >NUL
GOTO Start
Grüße
bastla
Member: Nemthor
Nemthor Sep 30, 2009 at 13:24:12 (UTC)
Goto Top
Hallo bastla,

das funktioniert leider nicht so richtig. Ich glaub ich hab mich etwas falsch ausgedrückt.

In dem Ordner "NeuerOrdner" befinden sich ca. 20 Datein. 2 davon beginnen mit "over_m", enden jedoch unterschiedlich (over_m2342323 und over_m3321245465). Diese 2 Datein sollen in den Ordner "Test" kopiert werden. Soweit hab ich es selbst hinbekommen.

Jetzt mein Problem, der Ordner "NeuerOrdner" aktualisiert seine 20 Datein ca alle 3 Minuten. Sprich die alten 20 Daten werden gelöscht und durch die neuen ersetzt. Sobald dies passiert ist, sollen die 2 kopierten Daten im Ordner "Test" gelöscht werden und durch die neuen ersetzt werden. Ich hab mir jetzt gedacht, ich lass die Batch alle xx Sekunden durchlaufen und überprüfen ob eine neue Datei im Ordner "NeuerOrdner" vorhanden ist.

Ich hatte meine Batch erst so eingestellt, dass es alle 185 Sekunden ausgeführt wird. Problem, der Ordner "NeuerOrdner" kann sich auch schon nach 2 Minuten aktualisieren oder erst nach 10 Minuten, deswegen würde ich gerne alle 20 Sekunden die Batch laufen lassen.

Gibt es vielleicht eine besser Methode?
Bin für alles offen face-smile

Danke schonmal.
Gruß
Nemthor
Member: bastla
bastla Sep 30, 2009 at 13:55:56 (UTC)
Goto Top
Hallo Nemthor!

Was spricht dagegen, die Dateien auf jeden Fall zu kopieren? Wenn sie unterschiedlich sind, ist's ohnehin erforderlich, und wenn sie den gleichen Inhalt haben, sollte es doch auch egal sein, ob die am Zielort vorhandene Datei durch die neue Datei ersetzt wird ...

Ansonsten hast Du mit "fc /b" ein Werkzeug, um einen binären Vergleich durchzuführen - sind die beiden Dateien gleich, erhältst Du einen Errorlevel 0, ansonsten 1 (vereinfacht lässt sich das per "&&" bzw "|" auswerten bzw dazu benutzen, bedingt einen oder mehrere Befehle auszuführen. Voraussetzung ist dafür, dass die Dateinamen bekannt sind oder sich auf andere Art (Dateigröße) eine Zuordnung der Dateien treffen lässt.

Grüße
bastla
Member: TsukiSan
TsukiSan Sep 30, 2009 at 14:06:02 (UTC)
Goto Top
Hi Nemthor,

bastla's script läuft alle 20 Sekunden.

ping -n 20 localhost >NUL

Dein Problem muss noch etwas anderes sein.
Mal schauen!

Gruß
Tsuki
Mitglied: 60730
60730 Sep 30, 2009 at 14:41:39 (UTC)
Goto Top
Servus,

ich würde das anders anfassen..

:start
ping n-20 localhost >nul
dir /tc C:\Daten\NeuerOrdner\over_m*.* |find "%date:~-4%" >C:\Daten\NeuerOrdner\log.log  
dir /tc C:\Daten\NeuerOrdner\test\over_m*.* |find "%date:~-4%" >C:\Daten\NeuerOrdner\test\log.log  
fc C:\Daten\NeuerOrdner\log.log C:\Daten\NeuerOrdner\test\log.log  && goto nix || goto copy
goto eof
:nix
echo nix
goto start
:copy
echo copy
:eof
fc ist gut aber bei größeren Daten auch lahm face-wink

gruß
Member: bastla
bastla Sep 30, 2009 at 14:55:29 (UTC)
Goto Top
@timobeil
Wenn die Datei alle paar Minuten neu geschrieben wird, bringt der Vergleich des Erstellungsdatums vermutlich nix (ganz abgesehen davon, dass wegen der "ping"-Pause und des dadurch verzögerten Kopierens das Erstellungsdatum im Zielordner im Normalfall einige Sekunden hinten nach sein dürfte).

Wäre das Änderungsdatum als Vergleichskriterium verwendbar, ließe sich die ganze Aktion auf ein "xcopy /d" reduzieren.

Letzte Möglichkeit, um das "fc" zu vermeiden: Wenn die Dateien unterschiedliche Größe haben, steht fest, dass es eine neue Datei gibt - wenn allerdings die Größe gleich ist, kann sich der Inhalt dennoch unterscheiden.

Diese Überlegungen hängen aber in der Luft, solange wir noch nicht einmal wissen, ob die beiden Dateien immer den gleichen Namen tragen, und falls nicht, woran die jeweils zusammengehörigen zu erkennen sind ...

... und was dagegen spräche, ganz ohne Prüfung mit der neuen Version zu überschreiben.

Grüße
bastla
Mitglied: 60730
60730 Sep 30, 2009 at 15:00:38 (UTC)
Goto Top
Zitat von @bastla:
@timobeil
face-wink

@bastla
ich schrieb ja "ich würde es anders anfassen" - nicht besser und stimme deinen Einwänden 100% zu.

Grüße
bastla

zurück
Member: bastla
bastla Sep 30, 2009 at 15:26:12 (UTC)
Goto Top
@timobeil
Du kennst mich doch sicher schon gut genug, um zu wissen, dass ich kein Problem mit besseren Lösungen habe - und Dein Hinweis darauf, "fc" nach Möglichkeit zu vermeiden, ist auch völlig berechtigt. face-smile

Mein "lautes Denken" war zwar an Dich adressiert, aber soll natürlich auch Nemthor Anhaltspunkte liefern, was er noch zum Entwickeln der Lösung beitragen könnte/sollte ...

Grüße
bastla
Member: Nemthor
Nemthor Oct 01, 2009 at 05:34:44 (UTC)
Goto Top
Guten Morgen,

erst mal danke für die Antworten.

Ich hab gestern noch mal einiges getestet und bin zum Entschluss gekommen die Daten immer ohne Überprüfung zu überschreiben. Mein Problem ist halt, dass wenn die Datei im ungünstigens Fall ersetzt wird sich das "Show-Prog" aufhängt. Das umgeh ich aber jetzt, indem ich eine Rückmeldung von dem "Show-Prog" erwarte und fals keine Rückmeldung kommt der Prozess gekillt und neu gestartet wird.

Nochmal kurz was ich gemacht hab:

- Messsystem gibt in einem Ordner die aktuellen Werte und Bilder aus (ca. 20 Datein) cvs, avr, tif
- Mit Excel/VBA hol ich mir die cvs und Werte sie aus.
- Die Bilder sollen in einen neuen Ordner kopiert werden, und am Monitor ausgegeben werden. Das war auch hier mein Problem mit over_m. Die Bilder haben immer die gleiche Größe und beginnen mit over_m und einem angefügten Zeitstempel (over_m01102009072953 heißt 01.10.2009 07:29:53 Uhr)

Ich hatte anfangs die Bilder auch in Excel/VBA mit verwaltet und ausgegeben. Das ging eigentlich recht gut, Problem nach 3 monaten Datenmüll gabs öfters Probleme. Jetzt sollte es wieder passen. Danke für die Tipps.

Gruß
Nemthor