Benutzer mit den meisten Antworten
Zeichenkettenoperationen

Frage
-
Hallo liebe PS-Community,
ich stehe derzeit vor einer kleinen Herausforderung und weiß leider noch nicht wie ich da genau vorgehen kann. Es gibt ein Pfad in welchem mehrere Dateien abgelegt sind. Diese hole ich mir mit:
$FileObj = Get-ChildItem -Path "$InputPath"
und bearbeite diese anschließend mit:
$FileObj | ForEach-Object{ $_.Name }
Nun sind die Dateinamen immer unterschiedlich und mitten im Dateinamen steht eine Nummer wie "RD839293" oder "32378283". Die Zahlen sind natürlich immer unterschiedlich.
Nun möchte ich gucken, ob der Dateiname eine 8 stellige Zahl enthält. Wenn dies = True ist, soll die 8 stellige Zahl den kompletten Dateinamen ersetzen.
Ich hoffe das Ihr mir helfen könnt.
Liebe Grüße
-Lars
Antworten
-
Du meinst sowas?
PS U:\> '23 Hallo PS Community RD345678 ABCD Test 382' -replace '.*RD(\d{6}).*','$1' 345678
$FileName = '23 Hallo PS Community RD345678 ABCD Test 382' $FileNr = $FileName -replace '.*RD(\d{6}).*','$1' $FileNr
Beste Gruesse
brima- Bearbeitet brima Mittwoch, 31. August 2016 15:14
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 8. September 2016 11:50
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 8. September 2016 22:49
Alle Antworten
-
Hallo,
ich bin nicht so der Beste in Regex, aber das wäre mal an Ansatz:
$string = "Hallo PS Community RD345678 ABCD Test" if($string -match "(RD+\d{6})"){ $new = $string -replace "([a-z ])",'' $new ="RD"+$new $new } elseif($string -match "(\d{8})"){ $new = $string -replace "([a-z ])",'' $new }
Viel Erfolg
Beste Grüße Andy
- Bearbeitet Andreas Bittner Mittwoch, 31. August 2016 12:53 Verbesserung
-
Hi Andy,
vielen Dank für die schnelle Antwort. Das mit RegEx hat mir schonmal weitergeholfen. Mein Beispiel war wohl leider ein bisschen blööd.
Neues Beispiel wäre:
$string = "23 Hallo PS Community RD345678 ABCD Test 382"
Mit deinem Code würde ich dann noch die 23 und die 382 noch stehen bleiben. Gibt es nicht die Möglichkeit das wenn ich mit
if($string -match "(RD+\d{6})"){}
etwas suche, das er mir dann direkt das gefundende in eine Variable schreibt?
-
Du meinst sowas?
PS U:\> '23 Hallo PS Community RD345678 ABCD Test 382' -replace '.*RD(\d{6}).*','$1' 345678
$FileName = '23 Hallo PS Community RD345678 ABCD Test 382' $FileNr = $FileName -replace '.*RD(\d{6}).*','$1' $FileNr
Beste Gruesse
brima- Bearbeitet brima Mittwoch, 31. August 2016 15:14
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 8. September 2016 11:50
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 8. September 2016 22:49
-
Lars,
vielleicht noch als Tipp: Wenn Du mit '-match' eine Vergleichsoperation durchführst und einen Treffer landest, dann wird automatisch die Variable '$Matches' erzeugt und mit dem Vergleichsergebnis gefüllt. Wenn Du Dir diese Variable nach Deinem Vergleich ausgeben läßt und damit und vielleicht mit Deiner Klammersetzung im Regex-Muster ein wenig 'spielst', dann findest Du sicher schnell raus, wie Du das nutzbringend anwenden kannst.
PS:>'23 Hallo PS Community RD345678 ABCD Test 382' -match '(RD(\d{6}))' True PS:>$Matches Name Value ---- ----- 2 345678 1 RD345678 0 RD345678
Grüße aus dem sonnigen Berlin
(79,108,97,102|%{[char]$_})-join''- Bearbeitet BOfH-666 Montag, 5. September 2016 14:39