145971

Xcopy schlägt öfters fehl

Guten Morgen !!

ich habe zwei Ordner:

C:\A
C:\B

In A befindet sich eine mdb Datei, welche öfters am Tag aktualisiert wird.
Dieses Datei hat einen dynamischen Namen, je nach Erstellungsdatum - z.B.:

DB-2021-05-25-0949.mdb

Dieses Datei möchte ich gerne in den Ordner B kopieren lassen, allerdings mit dem Namen DB.mdb
Habe dafür eine batch geschrieben, welche via Taskplaner 1x die Stunde ausgeführt wird:

@echo off

xcopy "C:\A\DB-*.mdb" C:\B  
del "C:\B\DB.mdb"  
rename "C:\B\DB-*.mdb" DB.mdb  

Kurz zur Erklärung:

Schritt 1: kopiere die Datei DB-*.mdb von Ordner A nach B
Schritt 2: lösche die vorhandene DB.mdb im Ordner B
Schritt 3: Bennen die DB-*.mdb im Ordner um, auf DB.mdb

Das klappt in erster Linie ganz gut.
Allerdings kommt es irgendwann zu einem Fehler, den ich nicht reproduzieren / feststellen kann:

Inhalt Ordnerinhalt B sollte eigentlich nach dem o.g. Schema immer wie folgt aussehen:
- DB.mdb

Im Fehlerfall sieht dieser aber so aus:
- DB.mdb
- DB-2021-05-25-0949.mdb

Sprich: Schritt 1 wurde durchgeführt, Schritt 2 und ggf. 3 nicht mehr.

Könnt ihr euch das erklären?
Danke !!
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 667047

Url: https://administrator.de/forum/xcopy-schlaegt-oefters-fehl-667047.html

Ausgedruckt am: 29.04.2025 um 17:04 Uhr

Vision2015
Vision2015 25.05.2021 um 10:38:14 Uhr
Goto Top
moin...

prüfe doch ma , ob die *.mdb noch in zugriff ist?

was ist das Access?

Frank
145971
145971 25.05.2021 um 10:45:20 Uhr
Goto Top
aktuell kann ich es nicht überprüfen, da der "Fehlerzustand" nicht aktiv ist im Moment.
Aber es kann durchaus sein, dass die Datei in Zugriff ist - wird von einem Server genutzt.

Gibt es eine Möglichkeit, das zu "Forcen"?
Sprich: Löschen trotz Zugriff?
Vision2015
Vision2015 25.05.2021 um 10:50:48 Uhr
Goto Top
moin
Zitat von @145971:

aktuell kann ich es nicht überprüfen, da der "Fehlerzustand" nicht aktiv ist im Moment.
Aber es kann durchaus sein, dass die Datei in Zugriff ist - wird von einem Server genutzt.
prima... was ist es den jetzt?

Gibt es eine Möglichkeit, das zu "Forcen"?
ne... aber evtl. nen dump zu erstellen.etc...
Sprich: Löschen trotz Zugriff?
geht nicht... aber wir wissen ja auch nicht, um was es sich handelt!

Frank
145971
145971 25.05.2021 um 10:56:50 Uhr
Goto Top
ja, ist eine Access Datenbank
GrueneSosseMitSpeck
GrueneSosseMitSpeck 25.05.2021 um 11:02:08 Uhr
Goto Top
und bei Access gibt es zu jeder dateiname.mdb bzw dateiname.accdb eine dateiname.ldb Datei, die anzeigt, daß mindestens ein Client mit der MDB verbunden ist.

Man muß also prüfen ob eine dateiname.ldb da ist und dann den Kopierversuch abbrechen, MDBs die geöffnet sind kann man NICHT auf Dateisystemebene kopieren, das ginge dann nur mit einem Filesystem-Snapshot des gesamten Datenträgers.
145971
145971 25.05.2021 um 11:07:40 Uhr
Goto Top
das ist interessantweiser nicht der Fall.
Wir haben auf dem Server eine Anwendung laufen, welche in diese mdb. Dabei schaut. (allerdings nicht via Access Software).
Vielleicht war meine Aussage hier auch nicht richtig.

Fakt ist. Wenn der Zugriff da ist, sehe ich keine ldb Dabei.

Anders gefragt:
Gibt es eine Möglichkeit via Batch abzufangen, ob der Löschvorgang funktioniert hat?

Dachte an:

Schritt 1: lösche die vorhandene DB.mdb im Ordner B
NICHT OK > beende Batch (wird durch den Taskplaner später erneut versucht)
WENN OK>
Schritt 2: kopiere die Datei DB-*.mdb von Ordner A nach B
Schritt 3: Bennen die DB-*.mdb im Ordner um, auf DB.mdb
145971
145971 25.05.2021 um 11:18:57 Uhr
Goto Top
Wollte nun dies mal testen:

@echo off

del "C:\B\DB.mdb" /f /q  

if exist "C:\B\DB.mdb" (  
    exit
) else (
    xcopy "C:\A\DB-*.mdb" C:\B  
    rename "C:\B\DB-*.mdb" DB.mdb  
)
Vision2015
Vision2015 25.05.2021 um 12:23:08 Uhr
Goto Top
moin...

wenn die *.mdb im zugriff ist, wird das nix mit dem löschen....

Frank
145971
145971 25.05.2021 um 12:32:51 Uhr
Goto Top
ja und deswegen ja die Abfrage mit if else.
Nach dem Motto: versuch es später.
TK1987
TK1987 25.05.2021 aktualisiert um 12:40:07 Uhr
Goto Top
Moin.

Wann lernen die Leute endlich sich selbst einen Gefallen zu tun und Powershell zu nutzen 🙄

Zitat von @145971:
Anders gefragt:
Gibt es eine Möglichkeit via Batch abzufangen, ob der Löschvorgang funktioniert hat?

Gruß Thomas
em-pie
em-pie 25.05.2021 um 15:43:01 Uhr
Goto Top
Moin,

löse das doch mit ROBOCOPY.
Der kann beim Kopieren die Datei direkt in DB.mdb umbenennen und die Zieldatei in diesem Zuge mit überschreiben.
Durch die Retry-Funktion kann er das mehrmals probieren, sollte ein anderes Programm noch einen kurzweiligeh Zugriff haben.

Einfach mal mit den Parametern von ROBOCOPY beschäftigen face-wink

Gruß
em-pie