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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62568
Url: https://administrator.de/contentid/62568
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
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ß