eckerleadm
Goto Top

Text an spezieller Stelle suchen

Hallo,

habe hier folgende Problemstellung zu bewältigen:
Es kommen täglich EDI Daten in ein Verzeichnis (Dateiname variiert (laufende Nummer)).
Dort finde ich immer in der zweiten Zeile an der Position 22 - 25 eine spezielle Nr, mit welcher ich das Werk des Kunden identifizieren kann (XXXX).

511 ...........
512 51201XXXX
513
......

Ich möchte die Datei (wenn möglich per Batch) in ein spezielles Verzeichnis verschieben, wenn ein spezieller Wert an dieser Stelle steht.

Vielen Dank für Eure Hilfe

Content-Key: 110645

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: Biber
Biber Mar 05, 2009 at 18:32:57 (UTC)
Goto Top
Moin EckerleADM,

willkommen im Forum.

Ich habe mir mal 3 Dateichen nach Deinem Muster und unter der Endung *.edi angelegt und komme mit folgendem Oneliner zum Ziel (oder zumindest zu einem Lösungsweg) am CMD-Prompt:
>for /f "delims=: tokens=1,2,4" %i in ('findstr /n $ d:\temp\*.edi^|findstr /C:":2:"') do @set "x=%k" & @echo Datei "%i:%j" kopieren nach Z:\Ziel\!x:~9,4!  
Datei "d:\temp\edi8815.edi" kopieren nach Z:\Ziel\XXXX  
Datei "d:\temp\edi8816.edi" kopieren nach Z:\Ziel\YYYY  
Datei "d:\temp\edi8817.edi" kopieren nach Z:\Ziel\aaaa  

Im Batch dann ungefähr:
::---VerteilDieEDIs.cmd ---
@echo off & SetLocal EnableDelayedExpansion
Set "sourceDir=D:\Temp" & Set "targetdir=Z:\Ziel"  
FOR /F "delims=: tokens=1,2,4" %%i in ('findstr /n $ "%sourceDir%\*.edi"^|findstr /C:":2:"') do (  
            set "x=%k"   
           echo MOVE "%i:%j" "%targetDir%\!x:~9,4!"  
)
[Ungetestete Skizze]

Erläuterung:
Ein proof-of-concept bzw. der erste Schritt ist das Rausflöhen der zweiten Zeilen je Datei:
>findstr /n $ d:\temp\*.edi|findstr /C:":2:"
d:\temp\edi8815.edi:2:512 51201XXXX
d:\temp\edi8816.edi:2:512 51201YYYY
d:\temp\edi8817.edi:2:512 51201aaaa
durch Durchsuchen aller *.edi-Dateien nach "$" (=Zeilenende) -->liefert alle Zeilen.
Aber wir wollen nur die Zeile 2--> deshalb das Ergebnis nach ":2:" filtern.
Diese Strings danach mit FOR /F durchnudeln.

Grüße
Biber
Member: EckerleADM
EckerleADM Mar 06, 2009 at 06:06:40 (UTC)
Goto Top
Hallo Biber,

vielen Dank für Deinen Lösungsansatz.
Ich werde mir das mal so zusammenbauen und probier dann mal mein Glück.
Member: Biber
Biber Mar 06, 2009 at 06:58:39 (UTC)
Goto Top
Moin EckerleADM,
Zitat von @EckerleADM:
... und probier dann mal mein Glück.
Na ja...
Glück ist, seine Freude in der Freude des anderen finden.
Georges Bernanos (1888 - 1948), Schriftsteller

Also teile dann bitte Dein Glück mit uns und setze einen grünen Haken. face-wink

Schönes Wochenende
Biber
Member: EckerleADM
EckerleADM Mar 06, 2009 at 10:22:21 (UTC)
Goto Top
So, hab jetzt folgende Lösung umgesetzt:

@echo off & SetLocal EnableDelayedExpansion
set "sourceDir=\\Server\\Quelle" & Set "targetDir=\\Server\\Ziel"

set text="51201XXXX000"

FOR /F "tokens=1,2,4 delims= " %%i in ('findstr /M /L "%text%" "%sourceDir%\*.neu"') do (
MOVE "%%i" "%targetDir%\!x:"

Ich konnte leider die Lösung mit der zweiten Zeile nicht umsetzen, bekam immer wieder einen Syntaxerror
(Vieleicht war ich auch etwas zu ungeduldig bei der Probiererei...)

Da die Zeichenfolge "text" nach Rücksprache mit unserem Kunden eindeutig das Werk identifiziert, habe ich diesen Weg gewählt...