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:
funktioniert auch, nur ich möchte es so in der Art erweitern:
Könnte mir da jemand behilfich sein?
Wär super.
Danke.
Gruß
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
: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ß
Please also mark the comments that contributed to the solution of the article
Content-Key: 126124
Url: https://administrator.de/contentid/126124
Printed on: April 19, 2024 at 23:04 o'clock
9 Comments
Latest comment
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:
Grüße
bastla
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
bastla
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 "
Grüße
bastla
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
Servus,
ich würde das anders anfassen..
fc ist gut aber bei größeren Daten auch lahm
gruß
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
gruß
@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 "
Letzte Möglichkeit, um das "
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
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
@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, "
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
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. 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