vincy69
Goto Top

per Batch Dateien kopieren, umbenennen und nur die kopierten aus dem Ursprungsverzeichnis verschieben

Hallo,

ich habe nun schon längere Zeit auf der Seite nach Lösungen für mein Problem gesucht aber leider nichts passendes gefunden.

Eine Applikation erstellt unregelmäßig eine .DAT Datei in ein Verzeichnis im Netzwerk.

Diese DAT Datei soll auf ein anderes Netzlaufwerk kopiert werden und dort die Dateierweiterung auf TXT geändert werden.

Wenn dies erledigt ist sollen nur die Dateien die vorher auch kopiert wurden in ein drittes Verzeichnis (Archiv) verschoben werden.

Mein Ansatz sieht bisher folgendermassen aus:


copy D:\zzz\*.dat D:\yyy

rename D:\yyy\*.dat *.txt

if %errorlevel% equ 0 move d:\zzz\*.dat d:\xxx


Das Problem ist nur, dass im letzten Schritt auch Dateien verschoben werden die während des Kopier- /Umbenennungsvorgang in das Ursprungsverzeichnis zugefügt wurden.

Meine Frage jetzt:

Wie kann ich das mit einfachen 'Bordmitteln' lösen?

Content-ID: 62568

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

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

bastla
bastla 28.06.2007 um 11:22:08 Uhr
Goto Top
Hallo vincy69 und willkommen im Forum!

Wie wäre es mit folgender Strategie:
  • Verschiebe alle *.dat aus D:\zzz nach D:\DatTemp
  • Kopiere alle *.dat in D:\DatTemp mit gleichzeitigem Umbenennen nach D:\yyy (copy *.dat D:\yyy\*.txt)
  • Verschiebe alle *.dat aus D:\DatTemp nach D:\xxx

Durch das Zwischenschalten des "DatTemp"-Verzeichnisses könntest Du die Vorgänge zeitlich "entkoppeln".

Grüße
bastla
vincy69
vincy69 28.06.2007 um 11:43:43 Uhr
Goto Top
Ersteinmal vielen Dank für die prompte Antwort.

Das Problem hierbei ist nur, dass auch während des Verschiebens neue Dateien in das Ursprungsverzeichnis D:\zzz hineingeschrieben werden können, die vom move Befehl während der Erstellung einfach unvollständig mitverschoben werden und damit das Erstellungsprogramm zum Absturz bringen (file not found).
bastla
bastla 28.06.2007 um 12:18:11 Uhr
Goto Top
Hallo vincy69!

Wenn Du beim Kopieren keine unvollständigen Zieldateien erhältst, könntest Du mit
xcopy /m "D:\zzz\*.dat" D:\yyy\  
die kopierten Dateien mit einem zurückgesetzten Archiv-Attribut kennzeichnen und zum Abschluss der ganzen Aktion mit
for /f "delims=" %%i in ('dir /b /a-a "D:\zzz\*.dat"') do del "%%~fi"  
die vorher kopierten Dateien löschen.

Ansonsten müsstest Du beim Erstellungsprogramm ansetzen und etwa mit einem "Token" arbeiten, indem das Programm vor dem Erstellen überprüft, ob zB eine Datei "Locked.txt" (welche vom Kopier-/Verschiebe-Batch gesetzt und wieder gelöscht werden muss) vorhanden ist und falls ja, solange in einer Warteschleife läuft, bis "Locked.txt" wieder gelöscht wurde.

Grüße
bastla
36539
36539 28.06.2007 um 14:10:29 Uhr
Goto Top
Hallo,
Das Problem ist nur, dass im letzten Schritt auch Dateien verschoben werden die
während des Kopier- /Umbenennungsvorgang in das Ursprungsverzeichnis zugefügt
wurden.
Und wenn du D:\zzz\*.dat immer zuerst in ein temporäres Verzeichnis D:\temp\zzz kopierst und damit weiterarbeitest? Also auch für den rename und move-Aktion nicht D:\yyy sondern D:\temp\zzz benutzt. Am Schluß löscht Du den Inhalt von D:\temp\zzz. So können in der Zwischenzeit in D:\zzz\*.dat hinzugefügte Daten nicht stören. Die werden dann beim nächsten Durchlauf erfasst.

gruß
vincy69
vincy69 28.06.2007 um 14:53:58 Uhr
Goto Top
Vielen Dank für die guten Ideen.

Ich habe nun folgenden Lösungsweg eingeschlagen:


xcopy /m "D:\zzz\*.dat" D:\yyy

rename D:\yyy\*.dat *.txt


Die Dateien bleiben dann zwar im Ursprungsverzeichnis stehen werden vom Batch beim nächsten Lafuf aber nicht mehr angefasst.

Löschen der Dateien macht dann einmal täglich ein anderer Batch.