kleinerbub
Goto Top

Per Batch wirksam prüfen ob in Textdatei aktuell geschrieben wird bzw. ob sie im Zugriff ist

Hi IT-Crowd

Hintergrund: Eine Textdatei soll per Batch von A nach B verschoben werden.

Ausgangspunkt: An die Textdatei werden sporadisch (programmgesteuert) Zeilen angefügt. Diese stellen Datensätze dar, die nur komplett verwendet werden können (logo!).

Problem: Verschiebe ich die Datei, kann es sein, dass die letzte Zeile noch nicht fertig geschrieben ist. Ich muss also prüfen, ob momentan in die Datei geschrieben wird, falls nicht, kann ich sie moven, ansonsten probier ichs später nochmal.

Ich habe es bereits per
versucht, allerdings funktioniert das nicht. Ich denke der Zeitraum, in dem die Datei wirklich zum schreiben geöffnet ist, ist nur sehr kurz, so dass es wohl ein sehr großer Zufall ist, per openfiles genau den Moment zu erwischen, dass er das richtige Ergebnis zurückgibt.

Eine andere Möglichkeit wäre es zu prüfen, ob das letzte Zeichen in der Datei ein CRLF ist. Das würde bedeuten, die letzte Zeile ist komplett und ich kann die Datei moven. Ich habe aber keine Ahnung, wie ich das am schnellsten prüfe.

Oder vielleicht noch einfacher: zählen, ob die letzte Zeile alle Felder enthält.

Hier ist noch ein Beispiel für den Aufbau der Textdatei:
<code type:"plain">10009876;21214789;Mustermann;Hans;01.05.1963;M;Wiesenweg 1;Musterstadt;98765;25.05.2012 12:40:00;ABT1CRLF

Wer hat eine Idee?

kleinerbub

Content-Key: 185489

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

Printed on: April 23, 2024 at 21:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch May 25, 2012 updated at 12:43:12 (UTC)
Goto Top
moin kleinerbub,

heisst das genauer die Letzte Zeile besitz erst eine ZeilenSchaltung, wenn alle Einträge in der Zeile Vorhanden sind?

dann so (es ist auch egal, ob die Datei zum Schreiben gesperrt ist)
findstr /nv $ "Dateiname" 1>nul &&echo Zeile noch nicht Fertig ||echo Letzte Zeile ist Fertig geschrieben.  

wenn Du testen willst ob die Datei zum schreiben gesperrt ist dann so
:check
(type nul 4>>Dateiname ) 2>nul && echo Datei kann verschoben werden ||Datei ist noch gesperrt &&goto :check
rem weiterer Code
Hier gibs auch ne Batch zum Check dafür
Batch-Abfrage, ob bestimmte excel-Datei geöffnet ist und diese dann auch schließen (können)
[Edit]da Openfiles nur mit Adminrechten läuft[/Edit]

Gruß Phil
Member: kleinerbub
kleinerbub May 29, 2012 at 05:47:07 (UTC)
Goto Top
Hi Phil,

danke für deine prompte Antwort. Hab die erste Variante probiert und es funktioniert.

Das zweite bringt mir hier nichts, da die Datei nicht gesperrt ist. Das Problem war, dass der letzte Datensatz unvollständig war, wenn die Datei während des Schreibvorgangs verschoben wurde.

Rein Interesse halber: Hat jemand ne Lösung parat, wo ich zählen kann wieviele Felder (oder ;) in der letzten Zeile stehen und damit prüfen kann, ob die Zeile komplett ist?


Danke für die Hilfe, mein Problem ist gelöst.
Member: pieh-ejdsch
pieh-ejdsch May 29, 2012 updated at 10:08:09 (UTC)
Goto Top
moin kleinerbub,

zum testen, ob eine bestimmte mindestanzahl von 10 Zeichen (;) enthalten ist:
findstr .*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*; Dateiname
Bei Zeilen mit NICHT 10 mal semikolon:
findstr /v .*;.*;.*;.*;.*;.*;.*;.*;.*;.*;.*; Dateiname

Gruß Phil