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-Key: 399996

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

Printed on: April 26, 2024 at 13:04 o'clock

Member: colinardo
Solution colinardo Jan 31, 2019 updated at 09:47:25 (UTC)
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
Mitglied: 77559
77559 Jan 31, 2019 at 22:20:25 (UTC)
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