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-Key: 62568

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

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

Member: bastla
bastla Jun 28, 2007 at 09:22:08 (UTC)
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
Member: vincy69
vincy69 Jun 28, 2007 at 09:43:43 (UTC)
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).
Member: bastla
bastla Jun 28, 2007 at 10:18:11 (UTC)
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
Mitglied: 36539
36539 Jun 28, 2007 at 12:10:29 (UTC)
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ß
Member: vincy69
vincy69 Jun 28, 2007 at 12:53:58 (UTC)
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.