derhoeppi
Goto Top

Powershell String zerlegen nach Zeichen

Hallo,

ich sammle über Get-Childitem Dateinamen aus Verzeichnissen. Diese Dateinamen haben ein Format "Datum_Uhrzeit_Dateiname". Diesen String möchte ich gerne in die Felder Datum, Uhrzeit und Dateiname zerlegen. Wenn ich mit der Split() Methode herangehe, bekomme ich zwar den String zerlegt, aber wenn der Dateiname aus irgendwelchen Gründen ebenfalls einen Unterstrich besitzt, hätte ich ein Array welches statt drei auf einmal vier Werte besitzt.

Aus diesem Grund habe ich die Frage, ob es Möglich ist den Split lediglich auf die ersten beiden Unterstriche zu beschränken?

Gruß
derhoeppi

Content-ID: 399996

Url: https://administrator.de/forum/powershell-string-zerlegen-nach-zeichen-399996.html

Ausgedruckt am: 25.12.2024 um 04:12 Uhr

colinardo
Lösung colinardo 31.01.2019 aktualisiert um 10:47:25 Uhr
Goto Top
Servus.
Aus diesem Grund habe ich die Frage, ob es Möglich ist den Split lediglich auf die ersten beiden Unterstriche zu beschränken?
Ja, dafür hat die Split-Methode einen weiteren Parameter um die Anzahl der Splits zu begrenzen:
https://docs.microsoft.com/de-de/dotnet/api/system.string.split?view=net ...
"eins_zwei_drei_vier".split("_",3)  
oder du arbeitest mit Regex und Submatches.
$m = [regex]::match("eins_zwei_drei_vier",'^([^_]+)_([^_]+)_(.*)$')  
$m.Groups[1].Value
$m.Groups[2].Value
$m.Groups[3].Value

Im Kontext mit Dateien kann man das z.B. mit dem Regex und einem Where-Object direkt in der Pipe nutzen
gci C:\Ordner -File | ?{$_.Basename -match '^([^_]+)_([^_]+)_(.*)$'} | %{  
    $part1 = $matches[1]
    $part2 = $matches[2]
    $part3 = $matches[3]
    # .....
}
Grüße Uwe
77559
77559 31.01.2019 um 23:20:25 Uhr
Goto Top
Du kannst auch mit dem -split Operator die Splits limitieren und direkt mehreren Variablen zuweisen:

$Date,$Time,$File = "2019-01-31_12.13.14_Datei_name.txt" -split '_',3  

> $date
2019-01-31
> $time
12.13.14
> $file
Datei_name.txt

Get-ChildItem C:\Ordner\*_*_* -File | ForEach-Object {
    $Date,$Time,$File = $_.Name -split '_',3  
    [PSCustomObject]@{
        Date = $Date
        Time = $Time
        File = $File
    }
}

Ausgabe:
Date       Time     File
----       ----     ----
2019-01-31 12.13.14 Datei_name.txt
Gruß
LotPings