slater55
Goto Top

Script Dateiinhalt auslesen und verschieben oder kopieren Batch

Hallo,

ich benötige Hilfe zum Thema Scripten.

Ich habe folgendes Problem. Wir nutzen in unserer Firma (mit 4 Töchterfirmen) Easylog (DHL) um Pakete zu versenden. Die Sendungsdaten werden direkt als txt-Datei aus unserem Warenwirtschaftssystem exportiert und in Easylog eigelesen. Dach dem wir dann ein Label generiert haben und die täglichen Sendungen abgeschlossen haben, wird eine Rückmeldungsdatei (auch eine txt-Datei) generiert, die wir dann wiederum in unser Warenwirtschaftssystem einlesen.

Soweit so gut, dass funktioniert auch alles wunderbar, ABER: die Rückmeldungen für alle Absender (insgesamt haben wir 5 verschiedene Absenderadressen) werden alle in nur 1 Ordner gepollt. Das kann man in Easylog auch leider nicht anders hinterlegen. Wir müssen daher die Dateien manuell öffnen um zu sehen welche Firma die Sendung betrifft um diese dann wiederum manuell in die Warenwirtschaft einzulesen, da vorher in der WAWI die Firma ausgewählt werden muss.

Meine Idee ist es, dass wir mit einem einfachen Script, dass die Dateizeilen ausliest (da darin auch die Absenderdaten enthalten sind) und dann die jeweilige Datei in einen Unterordner verschiebt oder kopiert.

Also quasi bisher läuft alles in C:\Easylog und es soll dann von dort in C:\Easylog\Firma1, C:\Easylog\Firma2, C:\Easylog\Firma3, C:\Easylog\Firma4 oder in C:\Easylog\Firma5 kommen. Am besten in einer Schleife, die das Minutenweise erledigt.

Die txt-Dateien sind wie folgt aufgebaut:

Lfd.Nr; Sendungsnummer;ka;ka;ka;MD;Absendername
11313;123456789012;0;1;1;74;Firma1;;usw.

Da ich leider nicht allzu viel von Scripts versehen hoffe ich jemand kann mir hier helfen.

Vielen Dank im Voraus und schönes WE.

Content-Key: 245348

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

Printed on: April 24, 2024 at 14:04 o'clock

Member: rubberman
rubberman Aug 01, 2014 at 19:56:29 (UTC)
Goto Top
Hallo Slater55, willkommen im Forum.

Die Textdatei besteht nur aus dieser einzigen Zeile, oder gibt es weitere Zeilen davor oder danach?

Grüße
rubberman
Member: Slater55
Slater55 Aug 01, 2014 at 20:55:11 (UTC)
Goto Top
Hallo rubberman,

vielen Dank.

Ne in den Textdateien stehen mehrere Zeilen. Pro Paket wird darin eine Zeile geschrieben, d.h. unter Umständen können da auch durch aus bis zu 200 Zeilen drin sein. Hab nur den Anfang einer Zeile als Beispiel kopiert.

Gruß
Slater55
Member: rubberman
rubberman Aug 01, 2014 updated at 21:29:17 (UTC)
Goto Top
OK, worauf ich hinaus will ist, dass es ganz unterschiedliche Methoden gibt, mit Textdateien zu arbeiten.
Für die eine ist bspw. interessant ob das Gesuchte bereits in der ersten Zeile steht (darf also auch keine Leerzeile sein), für die andere ist interessant ob alle Zeilen den gleichen Aufbau haben bzw. welche Zeile die erste ist, die ausgewertet werden soll.

Wir können ja mal testen ...
1. Variante
@echo off &setlocal
<"datei.txt" set /p "line="  
for /f "tokens=7 delims=;" %%i in ("%line%") do echo %%i  
pause

2. Variante
@echo off &setlocal
for /f "usebackq tokens=7 delims=;" %%i in ("datei.txt") do set "company=%%i"  
echo %company%
pause
Nehme statt "datei.txt" einen real existierenden Dateiname.

Funktioniert bereits eine der Varianten (wird der Firmenname ausgegeben)?

Grüße
rubberman
Member: Slater55
Slater55 Aug 01, 2014 updated at 22:27:02 (UTC)
Goto Top
Schon mal vielen Dank für die Hilfe. Also die Firma wird schon mal erkannt sogar bei beiden Varianten
Member: rubberman
Solution rubberman Aug 02, 2014, updated at Aug 04, 2014 at 06:31:03 (UTC)
Goto Top
Na super, dann bau ich das mal noch in eine Schleife ein.
@echo off &setlocal
for /f "delims=" %%i in ('dir /a-d /b *.txt') do (  
  set "file=%%i"  
  setlocal EnableDelayedExpansion
  <"!file!" set /p "line="  
  for /f "tokens=7 delims=;" %%j in ("!line!") do (  
    if not exist "%%~j\" md "%%~j"  
    move "!file!" "%%~j\"  
  )
  endlocal
)
Sollte die Dateiendung nicht txt sein (sondern bspw. csv), dann noch in Zeile 2 ändern.

Grüße
rubberman
Member: Slater55
Slater55 Aug 04, 2014 at 06:41:52 (UTC)
Goto Top
Super. Vielen Dank. Das macht ganz genau das was es soll!