tobmes
Goto Top

Findstr und regex

Hi Experten,

ich habe ziemlich viele PDF-Dateien, die ich mittels eines Batch-Files nach einem Bestimmten Muster durchsuchen möchte. Die Dateien von Interesse haben dieses Format:

call sheet BLABLABLABLABLA 1adde384-4d35-4ddb-b6d5-62c859a2f790.pdf
Beschreibung BlaBlaBlaBla 472e1a91-52f7-4689-b350-5df5c3126719.pdf

Dabei möchte ich am Ende alle PDF Dateien, die mit "call sheet" beginnen in einen separaten Ordner verschieben und auch alle PDFs, die nur diese 12345678-...-Endung haben.


Ich habe es jetzt erstmal so probiert. Aber leider klappt das so nicht
dir /p | findstr /R:"([a-zA-Z0-9]{8}-)([a-zA-Z0-9]{4}-)([a-zA-Z0-9]{4}-)([a-zA-Z0-9]{4}-)([a-zA-Z0-9]{12}-).pdf"  

Hat jemand einen Tipp für mich. Bin leider, wie man sieht, kein regex Experte. Zusätzlich habe ich im Moment auch noch keine richtige Idee, wie ich dann die Daten am besten kopieren soll.

Danke schon mal
Gruß
-tobmes

Content-ID: 347614

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

SeaStorm
SeaStorm 29.08.2017 aktualisiert um 22:17:05 Uhr
Goto Top
Zitat von @tobmes:

Hi Experten,

Hi
ich habe ziemlich viele PDF-Dateien, die ich mittels eines Batch-Files nach einem Bestimmten Muster durchsuchen möchte. Die Dateien von Interesse haben dieses Format:

Du willst nach Dateinamen suche, nicht deren Inhalt durchsuchen

call sheet BLABLABLABLABLA 1adde384-4d35-4ddb-b6d5-62c859a2f790.pdf
Beschreibung BlaBlaBlaBla 472e1a91-52f7-4689-b350-5df5c3126719.pdf




Ich habe es jetzt erstmal so probiert. Aber leider klappt das so nicht
dir /p | findstr /R:"([a-zA-Z0-9]{8}-)([a-zA-Z0-9]{4}-)([a-zA-Z0-9]{4}-)([a-zA-Z0-9]{4}-)([a-zA-Z0-9]{12}-).pdf"  

Hat jemand einen Tipp für mich. Bin leider, wie man sieht, kein regex Experte. Zusätzlich habe ich im Moment auch noch keine richtige Idee, wie ich dann die Daten am besten kopieren soll.

Nah dran face-smile
dir /b *.pdf | findstr /r "^call sheet.*[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\.pdf"  

Das würde zumindest mal alle PDFs finden die mit "call sheet" beginnen und das Muster haben.
Was du aber mit
Dabei möchte ich am Ende alle PDF Dateien, die mit "call sheet" beginnen in einen separaten Ordner verschieben und auch alle PDFs, die nur diese 12345678-...-Endung haben.
meinst verstehe ich nicht. Wenn du meinst, das einfach alles was mit diesem Ziffernmuster endet in deiner Liste sein soll, dann brauchst du ja die Unterscheidung mit dem call sheet nicht?
Oder willst du call sheet in Order A haben und alle anderen dann in Ordner B ?


Guck dir mal Powershell an. Damit klappt das ganze dann auch viel Einfacher:
Get-ChildItem | Where-Object {$_.Name -match "[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\.pdf"}  
tobmes
tobmes 30.08.2017 um 10:43:04 Uhr
Goto Top
Hi SeaStorm,

vielen Dank für deine Antwort. Mit der PowerShell sieht das ja wirklich schon mal viel einfacher aus und funktioniert super.


Zitat von @SeaStorm:

Oder willst du call sheet in Order A haben und alle anderen dann in Ordner B ?


Genau ich möchte alle Dateien die mit call sheet beginnen in einen Ordner A und alle die nur diese spezielle Endung haben in einen Ordner B kopieren.

Wenn ich das alles richtig verstanden habe, dann müsste es ja so gehen. Habe es allerdings noch nicht getestet. Oder gibt es evtl. auch eine schönere Lösung? Denn so müsste ich das ja einmal für die Dateien machen, die mit call sheet beginnen und dann nochmal für die Anderen.
Get-ChildItem | Where-Object {$_.Name -match "[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\.pdf"}| Copy-Item -Container -Destination C:\Temp\DevTest  

Gruß
-Tobmes
SeaStorm
Lösung SeaStorm 30.08.2017 aktualisiert um 10:55:52 Uhr
Goto Top
das wäre zumindest die direkteste Lösung, es in 2 Schritten zu machen.
Du kannst natürlich auch nur nach dem Muster suchen und dann die Ergebnisse in einer Schleife abarbeiten, in der du dann noch mal gesondert nach den Kriterien wie "Beginnt mit 'call sheet'" suchst. Aber für einen einmaligen oder statischen prozess ... muss man sich die Arbeit nicht machen

Ungetestet so in der Art
Get-ChildItem | Where-Object {$_.Name -match "call sheet.*[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\.pdf"}| Move-Item -Destination C:\Temp\DevTestA  

Get-ChildItem | Where-Object {$_.Name -match "[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}\.pdf"}| Move-Item -Destination C:\Temp\DevTestB  
tobmes
tobmes 30.08.2017 um 12:02:13 Uhr
Goto Top
Vielen vielen Dank für deine Hilfe. Der Prozess wird periodisch ausgeführt werden. Aber das ist jetzt erst schonmal ein Anfang. Ich werde mich noch mehr mit dem Thema befassen. Sollte ich nicht weiter kommen, dann werde ich hier wieder Nerven ;)

Danke und Gruß
-Tobmes
mayho33
mayho33 31.08.2017 um 09:43:37 Uhr
Goto Top
Hi tobmes,

Ich bin nicht unbeding ein Pro mit Regex, aber so wie ich das sehe brauchst du mal 2 Abfragen.

1) ist call sheet enthalten => ab in Ordner A
2) ist 12345678- enthalten => ab in Ordner B

Warum also nicht nur nach diesen mustern suchen? Du kannst dir schnell ein Bild machen ob du richtig liegst wenn du Regexr.com verwendest.

Suchstring in das Feld eingeben (gehen auch ganze Texte).
Expression ausformulieren und in Echtzeit das Ergebnis sehen.

In meinem Bespiel habe ich das hier versucht:

Suchstring:
call sheet 1adde384-4d35-4ddb-b6d5-62c859a2f790.pdf
1adde384-4d35-4ddb-b6d5-62c12345678-.pdf
1adde384-4d35-4ddb-b6d5-62c12345678-

Expression:
(12345678-)(\.pdf)+

Ergebnis:
1adde384-4d35-4ddb-b6d5-62c12345678-.pdf