145971
Goto Top

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 !!

Content-Key: 667047

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

Printed on: April 26, 2024 at 09:04 o'clock

Member: Vision2015
Vision2015 May 25, 2021 at 08:38:14 (UTC)
Goto Top
moin...

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

was ist das Access?

Frank
Mitglied: 145971
145971 May 25, 2021 at 08:45:20 (UTC)
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?
Member: Vision2015
Vision2015 May 25, 2021 at 08:50:48 (UTC)
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
Mitglied: 145971
145971 May 25, 2021 at 08:56:50 (UTC)
Goto Top
ja, ist eine Access Datenbank
Member: GrueneSosseMitSpeck
GrueneSosseMitSpeck May 25, 2021 at 09:02:08 (UTC)
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.
Mitglied: 145971
145971 May 25, 2021 at 09:07:40 (UTC)
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
Mitglied: 145971
145971 May 25, 2021 at 09:18:57 (UTC)
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  
)
Member: Vision2015
Vision2015 May 25, 2021 at 10:23:08 (UTC)
Goto Top
moin...

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

Frank
Mitglied: 145971
145971 May 25, 2021 at 10:32:51 (UTC)
Goto Top
ja und deswegen ja die Abfrage mit if else.
Nach dem Motto: versuch es später.
Member: TK1987
TK1987 May 25, 2021 updated at 10:40:07 (UTC)
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
Member: em-pie
em-pie May 25, 2021 at 13:43:01 (UTC)
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