dev-owl
Goto Top

TXT Datei Zeilenweise in neue TXT Dateien übergeben

Guten Tag,

bisher nur als stiller Mitleser habe ich heute eine Frage an die Gemeinschaft, bei der Ihr mir vielleicht helfen könnt.

Bisher hat ein Batch Skript von mir immer eine Export-Datei mit einer Zeile verarbeitet:

Max;Muster;Musterstraße;123;Musterhausen;

Die Export-Datei besteht aber neuerdings mit mehreren Zeilen (leider ist nie klar, wie viele Zeilen exportiert werden):

Max;Muster;Musterstraße;123;Musterhausen;
Max;Muster;Musterstraße;123;Musterhausen;
Max;Muster;Musterstraße;123;Musterhausen;

Gibt es eine Möglichkeit die „neue“ Datei Zeilenweise zunächst in TMP Dateien zwischen zu speichern und dann die TMP Dateien (immer eine nach der anderen) alle 10 Sek. in eine TXT Datei (Test.txt) in einem anderen Verzeichnis zu verschieben? Die zuvor erstellte TMP muss dann gelöscht werden.

Content-Key: 616044

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: rubberman
Lösung rubberman 25.10.2020 um 11:34:40 Uhr
Goto Top
Warum denn temporäre Dateien? Schreibe doch einfach nach 10s Test.txt mit der nächsten Zeile neu.
@echo off &setlocal
set "src=Export.csv"  
set "dst=irgendwo\Test.txt"  

setlocal EnableDelayedExpansion
<"!src!" (  
  for /f %%i in ('type "!src!"^|find /c /v ""') do echo %%i Zeilen&for /l %%j in (1 1 %%i) do (  
    echo verarbeite Zeile %%j
    set "line=" &set /p "line="  
    >"!dst!" echo(!line!  
    >nul ping -n 11 127.0.0.1 &REM -n 11 = 10s
  )
)
pause
Musste hier mal das alte PING Workaround anziehen, da TIMEOUT bei anstehender Umleitung des StdIn den Geist aufgibt.

Steffen
Mitglied: dev-owl
dev-owl 25.10.2020 aktualisiert um 12:47:05 Uhr
Goto Top
Zitat von @rubberman:

Warum denn temporäre Dateien? Schreibe doch einfach nach 10s Test.txt mit der nächsten Zeile neu.
@echo off &setlocal
> set "src=Export.csv"  
> set "dst=irgendwo\Test.txt"  
> 
> setlocal EnableDelayedExpansion
> <"!src!" (  
>   for /f %%i in ('type "!src!"^|find /c /v ""') do echo %%i Zeilen&for /l %%j in (1 1 %%i) do (  
>     echo verarbeite Zeile %%j
>     set "line=" &set /p "line="  
>     >"!dst!" echo(!line!  
>     >nul ping -n 11 127.0.0.1 &REM -n 11 = 10s
>   )
> )
> pause
> 
Musste hier mal das alte PING Workaround anziehen, da TIMEOUT bei anstehender Umleitung des StdIn den Geist aufgibt.

Steffen

Guten Tag Steffen,

vielen lieben Dank für die schnelle Rückmeldung. Habe damit nicht gerechnet.

Kann man hier noch einbauen, dass er alle 10 Sekunden, nachdem die Test.txt erstellt wurde noch ein Programm gestartet wird?
Mitglied: rubberman
Lösung rubberman 25.10.2020 um 13:07:18 Uhr
Goto Top
Ich denke schon. Zwischen Zeile 10 und 11 noch so etwas wie
start "" "C:\whereever\prog.exe"  

Steffen
Mitglied: dev-owl
dev-owl 25.10.2020 um 23:38:05 Uhr
Goto Top
Vielen lieben Dank dafür.

Ich könnte dann auch den kompletten Code des Skripts einfügen, anstatt hier „start ...“ zu hinterlegen? Oder gibt es da noch einen anderen Trick?
Mitglied: rubberman
rubberman 26.10.2020 um 08:36:57 Uhr
Goto Top
Schwierig zu sagen, ohne zu wissen wie der Ablauf in deinem Fall aussehen muss. START führt asynchron aus. Heißt, es wird nicht darauf gewartet dass das was ausgeführt wird auch wieder beendet ist. Statt dessen geht es ad hoc in die PING Zeile zum Warten.
Die Frage ist, warum musst du eigentlich warten? Weil du auf dein asynchron gestartetes Script warten musst? Dann solltest du definitiv START und PING rauswerfen und direkt synchron arbeiten...

Code des Scripts einfach einfügen, sollte grundsätzlich funktionieren. Du müsstest aber aufpassen, dass du dich in einer Umgebung mit verzögerter Variablenerweiterung befindest und diese auch benötigst.

Steffen