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?
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?
Please also mark the comments that contributed to the solution of the article
Content-ID: 62568
Url: https://administrator.de/forum/per-batch-dateien-kopieren-umbenennen-und-nur-die-kopierten-aus-dem-ursprungsverzeichnis-verschieben-62568.html
Printed on: May 14, 2025 at 14:05 o'clock
5 Comments
Latest comment
Hallo vincy69 und willkommen im Forum!
Wie wäre es mit folgender Strategie:
Durch das Zwischenschalten des "DatTemp"-Verzeichnisses könntest Du die Vorgänge zeitlich "entkoppeln".
Grüße
bastla
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
Hallo vincy69!
Wenn Du beim Kopieren keine unvollständigen Zieldateien erhältst, könntest Du mit
die kopierten Dateien mit einem zurückgesetzten Archiv-Attribut kennzeichnen und zum Abschluss der ganzen Aktion mit
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
Wenn Du beim Kopieren keine unvollständigen Zieldateien erhältst, könntest Du mit
xcopy /m "D:\zzz\*.dat" D:\yyy\
for /f "delims=" %%i in ('dir /b /a-a "D:\zzz\*.dat"') do del "%%~fi"
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

Hallo,
gruß
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.während des Kopier- /Umbenennungsvorgang in das Ursprungsverzeichnis zugefügt
wurden.
gruß