snoopy39
Goto Top

PowerShell letzten 4 Zeichen eines Strings weitergeben

Hallo Forum,

als PowerShell Newby bin ich mal wieder auf einen Wink mit Zaunpfahl von euch angewiesen. Ich lese aus einem Verzeichnis alle Unterverzeichnis aus, die nicht leer sind und bekomme eine Liste mit Namen. Den letzten Namen möchte ich weiterverarbeiten, finde aber den richtigen Befehl nicht. Bekannt ist, dass es ein Verzeichnisname mit 4 Zeichen ist und dieser immer am Ende der Liste steht

Habe bereits nach Substring, Split, Left, Right und ähnlichem gegoogled, aber nichts passendes gefunden:

$nonemptydir = get-childitem $sourcepath -Directory | ?{$_.Getfiles().Count -gt 0} Damit erstelle ich die Liste der Verzeichnisse, die nicht leer sind
$nonemptydir <Enter> Gibt dann folgendes Ergebnis
Dir1
Dir2
Dir3
Nun möchte ich "Dir3" in eine Variable $Name packen und dann weiterverarbeiten

Hat jemand einen Hinweis für mich, oder vielleicht sogar die komplette Syntax?

Danke im Voraus
Snoopy39

Content-Key: 398914

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

Printed on: April 25, 2024 at 14:04 o'clock

Member: NetzwerkDude
NetzwerkDude Jan 21, 2019 updated at 08:32:10 (UTC)
Goto Top
Sofern du davon ausgehen kannst das das gewünschte Verzeichnis immer an letzter Stelle von "$nonemptydir" steht:
Die meisten PowerShell Cmdlets geben bei mehreren Ergebnissen die einzelnen Objekte in ein Array verpackt aus - d.h. du musst nur das letzte Element des Arrays adressieren - in dieser Form:
$nonemptydir[-1]
(Der Code bedeutet soviel wie: Gib mir das letzte (minus) Objekt des Arrays aus)

PS: Les dich in das Thema Objektorientierung ein, denn das ist der Unterschied zwischen der alten cmd - wo alles ein string war - und der PS
Member: colinardo
Solution colinardo Jan 21, 2019 updated at 08:56:30 (UTC)
Goto Top
Servus @snoopy39 ,
wenn du dir mal die Eigenschaften von einem Directory-Object anschaust wirst du die Eigenschaft Name finden, diese wiederum ist ja vom Typ String und ein String hat immer die Eigenschaft Length für dessen Länge. Wenn du das nun mit Substring kombinierst und von der Eigenschaft Length deine 4 abziehst kannst du die Funktion Substring problemlos nutzen face-wink.

Möglichkeiten:
get-childitem $sourcepath -Directory | ?{$_.Getfiles().Count -gt 0} | sort Name | select -Last 1 | ?{$_.Name.length -ge 4} | %{$_.Name.Substring($_.Name.length-4)}
Alternative auch mit Regular Expressions (Regular Expressions Tutorial )
get-childitem $sourcepath -Directory | ?{$_.Getfiles().Count -gt 0} | sort Name | select -Last 1 | ?{$_.Name -match '.{4}$'} | %{$matches}  

Grüße Uwe
Member: snoopy39
snoopy39 Jan 21, 2019 at 08:54:24 (UTC)
Goto Top
Hallo NetzwerkDude,

vielen Dank für Deine schnelle Antwort, nur leider verstehe ich sie als Newby nicht ganz. Dein Hinweis auf die Objektorientierung habe ich verstanden, aber an welcher Stelle kommt das $nonemptydir (-1)?

Wenn ich folgendes eingebe:
$nonemptydir = get-childitem $sourcepath -Directory | ?{$_.Getfiles().Count -gt 0} <ENTER>
$nonemptydir (-1) <ENTER>

erhalte ich eine Fehlermeldung "unerwartetes Token"
Member: snoopy39
snoopy39 Jan 21, 2019 at 09:02:24 (UTC)
Goto Top
Hallo Colinardo,

cool, das ist die Lösung

Vielen Dank für Deine Hilfe

Wünsche Dir einen schönen Tag
Snoopy39