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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: rubberman
rubberman 01.08.2014 um 21:56:29 Uhr
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
Mitglied: Slater55
Slater55 01.08.2014 um 22:55:11 Uhr
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
Mitglied: rubberman
rubberman 01.08.2014 aktualisiert um 23:29:17 Uhr
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
Mitglied: Slater55
Slater55 02.08.2014 aktualisiert um 00:27:02 Uhr
Goto Top
Schon mal vielen Dank für die Hilfe. Also die Firma wird schon mal erkannt sogar bei beiden Varianten
Mitglied: rubberman
Lösung rubberman 02.08.2014, aktualisiert am 04.08.2014 um 08:31:03 Uhr
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
Mitglied: Slater55
Slater55 04.08.2014 um 08:41:52 Uhr
Goto Top
Super. Vielen Dank. Das macht ganz genau das was es soll!