oesi1989
Goto Top

Teile eines Strings entfernen

Ich würde gerne die Domäne und den hinteren Teil entfernen lassen mit "Remove".

$FileBaseName = $_.OU.replace('Domain\01_Benutzer_Gruppen\Neues_FS\','')  
$FileBaseName.Remove(6,20)

Leider klappt es nicht immer, da der hintere Teil unterschiedlich lang ist:
"Domain\01_Benutzer_Gruppen\Neues_FS\01_01\01_01_Grp"
"Domain\01_Benutzer_Gruppen\Neues_FS\02_01\02_01_Gruppe"

Ich möchte aber nur dieses 01_01 als Dateiname haben.

Kann ich mit "Remove" oder einem anderen Befehl ab einer bestimmten Position Zeichen entfernen lassen, ohne den 2. Parameter angeben zu müssen?
Wenn ich nur einen angebe, möchte er auch nur 6 Zeichen nach der Position entfernen, was entweder zu lang oder zu kurz ist.

Content-Key: 372725

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

Printed on: April 16, 2024 at 15:04 o'clock

Member: Kraemer
Kraemer May 02, 2018 at 11:20:21 (UTC)
Goto Top
$FileBaseName="Domain\01_Benutzer_Gruppen\Neues_FS\02_01\02_01_Gruppe"  
$FileBaseName -match ".*\\(.*)\\.*$"  
$matches[1]
Member: SeaStorm
SeaStorm May 02, 2018 at 11:24:09 (UTC)
Goto Top
hi

wenn ich das richtig verstehe willst du immer nur den letzten Ordner in der Kette?

$folder = "c:\my\stupid\folder"  

$folder = $folder.Split("\")  

$folder | Select-Object -Last 1
Member: oesi1989
oesi1989 May 02, 2018 at 11:27:19 (UTC)
Goto Top
Die Strings sehen so aus:
Domain\01_Benutzer_Gruppen\Neues_FS\01_01\01_01_Grp
Domain\01_Benutzer_Gruppen\Neues_FS\02_01\02_01_Gruppe
Domain\01_Benutzer_Gruppen\Neues_FS\03_01\03_01_Grp
...

Es soll danach nur noch 03_01 ausgeben.
Member: SeaStorm
SeaStorm May 02, 2018 at 11:30:20 (UTC)
Goto Top
dann musst du halt noch eine Regel finden, nach der die Ordner benannt wurden, um die überflüssigen Daten weg zu schmeissen.
Sind das immer 2Zahlen_2Zahlen ? Dann lies die ersten 5 stellen davon.
Ist das Immer "Grp" oder "Gruppe" hinten? Dann schmeiss die Strings raus.

Da ich das Regelwerk daran nicht kenne, werde ich jetzt nicht Rätsel raten.
Member: erikro
erikro May 02, 2018 at 11:35:49 (UTC)
Goto Top
Moin,

guckst Du hier:

https://www.windowspro.de/script/regulaere-ausdruecke-regex-powershell-v ...

(Für Dich besonders interessant der Teil mit Suchen und Ersetzen.)

LG

Erik
Member: oesi1989
oesi1989 May 02, 2018 at 11:39:17 (UTC)
Goto Top
Gibt es denn einen Befehl, womit ich einen bestimmten Teil eines Strings auslesen und in eine Variable übergeben kann?
Member: Kraemer
Kraemer May 02, 2018 at 11:42:37 (UTC)
Goto Top
Zitat von @erikro:
(Für Dich besonders interessant der Teil mit Suchen und Ersetzen.)
Das Problem ist, dass der TO eigentlich gar nichts ersetzen will... Es war nur der einzige Weg, der ihm bekannt gewesen ist, das Problem anzugehen.
Member: Kraemer
Kraemer May 02, 2018 at 11:43:11 (UTC)
Goto Top
Zitat von @oesi1989:

Gibt es denn einen Befehl, womit ich einen bestimmten Teil eines Strings auslesen und in eine Variable übergeben kann?
Sag mal willst du mich ärgern oder was?
Member: SeaStorm
Solution SeaStorm May 02, 2018 updated at 11:50:52 (UTC)
Goto Top
klar. Hat Kraemer oben schon geschrieben.

Oder stumpf, wenn du nur die ersten 5 Zeichen haben willst:
$folder = "c:\my\stupid\folder"  

$folder = $folder.Split("\")  

$result = $folder | Select-Object -Last 1
$result.Substring(0,5)
Member: oesi1989
oesi1989 May 02, 2018 at 11:51:57 (UTC)
Goto Top
Ich glaube, es kam nicht ganz rüber was ich möchte.
Der Dateiname lautet:
Domain\01_Benutzer_Gruppen\Neues_FS\01_01\01_01_Grp
Domain\01_Benutzer_Gruppen\Neues_FS\40_01_Test\40_01_Gruppe

Dateiname soll lauten: 01_01, 40_01_Test

Also der vordere String ist festgelegt, der hintere variabel
Mitglied: 136037
136037 May 02, 2018 updated at 11:54:46 (UTC)
Goto Top
$str = "Domain\01_Benutzer_Gruppen\Neues_FS\01_01\01_01_Grp"  
$value = $str.split('\')[-2]  
$value
:-PPP
Member: Kraemer
Kraemer May 02, 2018 at 11:53:42 (UTC)
Goto Top
Da frage ich gleich noch einmal: Willst du mich ärgern?
Member: oesi1989
oesi1989 May 02, 2018 at 12:02:44 (UTC)
Goto Top
Zitat von @Kraemer:

Da frage ich gleich noch einmal: Willst du mich ärgern?

Nein, wieso?
Member: oesi1989
oesi1989 May 02, 2018 at 12:03:58 (UTC)
Goto Top
Zitat von @SeaStorm:

klar. Hat Kraemer oben schon geschrieben.

Oder stumpf, wenn du nur die ersten 5 Zeichen haben willst:
$folder = "c:\my\stupid\folder"  
> 
> $folder = $folder.Split("\")  
> 
> $result = $folder | Select-Object -Last 1
> $result.Substring(0,5)

Ja, hat mit Substring funktioniert.
Member: Kraemer
Kraemer May 02, 2018 at 12:09:12 (UTC)
Goto Top
Zitat von @oesi1989:

Zitat von @Kraemer:

Da frage ich gleich noch einmal: Willst du mich ärgern?

Nein, wieso?
weil ich in der ersten Antwort in diesem Thread dir eine komplette Lösung gepostet habe. Vorhin kam noch was elegantes von @136037. Und du nimmst natürlich die mit Abstand unflexibelste Lösung...
Member: erikro
erikro May 02, 2018 at 12:36:32 (UTC)
Goto Top
Zitat von @Kraemer:

Zitat von @erikro:
(Für Dich besonders interessant der Teil mit Suchen und Ersetzen.)
Das Problem ist, dass der TO eigentlich gar nichts ersetzen will... Es war nur der einzige Weg, der ihm bekannt gewesen ist, das Problem anzugehen.

Das Problem ist, dass der TO die Frage schon mindestens dreimal in verschiedener Form gestellt hat. ;) In dem Artikel steht auch drin, warum und wie Dein Vorschlag oben funktioniert. Er soll mal lesen und verstehen lernen. ;)
Member: Pjordorf
Pjordorf May 02, 2018 at 14:45:38 (UTC)
Goto Top
Hallo,

Zitat von @erikro:
Er soll mal lesen und verstehen lernen. ;)
Warum denn? Es gibt doch dieses nette Forum im Internet (wie war gleich noch der Name?) wo ihm die Arbeit abgenommen wird face-smile

Gruß,
Peter