nachtfuchs
Goto Top

Dateien kopieren per Batch Abfrage auf Zugriff

Hallo zusammen,

ich möchte gerne regelmäßig Dateien aus einem Verzeichnis in ein anderes Verzeichnis kopieren.

Das Problem ist aber, dass diese Dateien evtl. zum Kopierzeitpunkt noch aufgebaut werden.

Gibt es eine Abfrage ob eine Datei von anderen Prozessen verwendet wird?
Sollte alles per Batch oder Script möglich sein,

Danke

Content-Key: 95322

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

Printed on: April 18, 2024 at 01:04 o'clock

Member: miniversum
miniversum Aug 26, 2008 at 10:29:08 (UTC)
Goto Top
Das einzige was mir da einfällt wäre es den Zeitpunkt der letzten Änderung zu kontrollieren, dann etwas zu warten und danach wieder. Ist der letzte Änderungszeitpunkt der gleiche wird sie nicht mehr verändert.
Das ganze würde dann ungefär so aussehen:
:loop
for /F \"tokens=1,2 delims= \" %%f in (\'dir /a-D /Tw /-C \"Datei.txt\"^|find \".\"\') do Set \"change1=%%f%%g\"  
ping -n 1 localhost
for /F \"tokens=1,2 delims= \" %%f in (\'dir /a-D /Tw /-C \"Datei.txt\"^|find \".\"\') do Set \"change2=%%f%%g\"  
if change2 neq change1 goto:loop
copy Datei.txt
Member: nachtfuchs
nachtfuchs Aug 26, 2008 at 10:44:15 (UTC)
Goto Top
Es sind ja mehrere Dateien.
Alternative: Da der Dateiaufbau maximal 20 Sekunden dauert könnte man doch nur Dateien kopieren, die älter als eine Minute sind?
Member: miniversum
miniversum Aug 26, 2008 at 10:59:45 (UTC)
Goto Top
Wenn er mehrere Dateien sind an könntest du das Ganze so erweitern:
for /F "delims=" %%f in ('dir /b') do call loop "%%~f"  
goto:eof

:loop
Set "change1="  
Set "change2="  
for /F "tokens=1,2 delims= " %%f in ('dir /a-D /Tw /-C "%~1"^|find "."') do Set "change1=%%f%%g"  
ping -n 1 localhost
for /F "tokens=1,2 delims= " %%f in ('dir /a-D /Tw /-C "%~1"^|find "."') do Set "change2=%%f%%g"  
if change2 neq change1 goto:loop
copy "%~1"  
goto:eof
Willst du weniger Prüfungen haben kannst du auch dort noch eien Wartezeit einfügen. indem du zwischen Zeile 9 und 10 noch folgende einfügst:
ping -n 5 localhost
um 5 sekunden zu warten.


Mit der Änderungszeit zu arbeiten und dann immer eine Minute zu warten wäre zwar auch möglich, aber aufwendig in batch. Um mit Zeiten zu arbeiten bietet sich dan eher vbs an.
Member: slubitz76
slubitz76 Aug 26, 2008 at 11:28:21 (UTC)
Goto Top
Hi,

für sowas bietet sich AutoIt an. Dort kannst du via "FileGetTime" herausfinden, wann das file z.B. das letzte mal "Accessed" wurde.

Grüße,
Stefan
Member: bastla
bastla Aug 26, 2008 at 12:33:20 (UTC)
Goto Top
Hallo nachtfuchs!

Du könntest auch
xcopy /c /d /y "D:\Quelle\*.*" "D:\Ziel\"  
versuchen.

Grüße
bastla