internet2107
Goto Top

RegEx Powershell

Hallo.

Aktuell werden bestimmte Dateien im Namen zerlegt.
Nun sind noch neue Dateien hinzugekommen.

Wir kann ich om RegEx Code beide verknüpfen ?

$Files:
"T101361_2 (Day 2) (2281695) (2_3) (19270236).dat"
"T100087-6_0705061_09032012(-7)_G.1_routine_101_1.dat"

$file_new = $Files -replace '^([^\s\(]+).*', '$1' | select -unique  

Als Ausgabe kommt:
T101361_2
T100087-6_0705061_09032012

Es soll aber so aussehen:

T101361_2
T100087-6

Wie kann ich also die beiden in einem Befehl verbinden ?

$file_new = $Files -replace '^([^\s\(]+).*', '^([^_(]+).*', '$1' | select -unique  

Danke.

Content-ID: 255283

Url: https://administrator.de/forum/regex-powershell-255283.html

Ausgedruckt am: 09.04.2025 um 22:04 Uhr

Doskias
Doskias 19.11.2014 aktualisiert um 15:06:54 Uhr
Goto Top
Und wieder eine ungenaue Aufgabenstellung face-smile

Wenn du "Nur" die ersten 9 zeichen brauchst (wonach es in dem kurzen Beispiel aussieht), dann mach doch einfach ein rename und werf alles nach dem 9.zeichen weg.

Wäre das auch eine Lösung?
internet2107
internet2107 19.11.2014 um 15:08:01 Uhr
Goto Top
Hallo.

Ja und nein. Das Problem ist, dass vorne auch 10 oder 11 oder 8 Zeichen stehen könnten.
Doskias
Doskias 19.11.2014 um 15:15:06 Uhr
Goto Top
Ok, und wovon ist das abhängig. Nach dem ersten Lesen hätte Ich Klammer und Unterstrich vermutet, aber die erste Datei hat Klammer und Unterstrich, und es wird erst ab der Klammer umbenannt. Klar das ganze hängt vermutlich vom Rest der Datei ab.

Vermutlich hilft eine Prüfung ab dem 7ten Zeichen, wann ein gewissen Zeichen kommt und ab da wird abgeschnitten?

Ich sag mal so: Ich habe dein problem und die beiden Skripte verstanden, aber was ich noch nicht verstanden habe ist, wann du wie viele Zeichen benötigst. Wie heißt es so schön: Ich brauche mehr Details face-smile
internet2107
internet2107 19.11.2014 um 15:25:40 Uhr
Goto Top
OK, ich glaube das wäre eine Alternative

if ($file_old -match '^([^_(]+).*') {  
        $file_new = $file_old -replace '^([^_(]+).*', '$1' | select -unique  
        write-host $file_new
}

if ($file_old -match '^([^\s\(]+).*') {  
        $file_new = $file_old -replace '^([^\s\(]+).*', '$1' | select -unique  
        write-host $file_new
}

@toguit

Im Grunde soll alles abgeschnitten werden, was nach der Zahl hinter dem (-) oder (_) ist.
Also wie gesagt:
T101361_2 ....alles anders muss weg
T100087-6 ....alles anders muss weg
colinardo
Lösung colinardo 19.11.2014 aktualisiert um 15:38:15 Uhr
Goto Top
Zitat von @internet2107:
T101361_2 ....alles anders muss weg
T100087-6 ....alles anders muss weg
'^([^\s\-_]+?[-_].).*','$1'
Grüße Uwe
internet2107
internet2107 19.11.2014 um 15:38:50 Uhr
Goto Top
Wie IMMER, DANKE Uwe !!!