epsodus 3 Geschrieben 29. Juni 2020 Melden Teilen Geschrieben 29. Juni 2020 Hallo zusammen, ich habe mal eine Frage zum Thema Powershell und Get-ChildItem und match. Ich habe mehrere Dateien, welche mit .csv enden. Aus diesen möchte ich bestimmte Dateinamen mit bestimmten Merkmalen identifizieren und umbenennen. Hier mal drei Beispiele: TEST.BARN.G1T3F.02983100.B200225.T014508.X02.CSV TEST.BARN.G1B53.02983104.D200225.T014508.C02.0400.CSV TEST.BARN.G9T3F.02981185.B200225.T014508.X02.CSV Ich möchte Dateinamen identifizieren und umbenennen die z.B. das Merkmal G1T3F und 3100 haben. Dies mache ich wie folgt: Get-ChildItem $DTCC_ROOT | where { $_.Name -match "G[0-9]{1}T[A-Z0-9]{2}" -and $_.Name -match "31[0-9]{2}" } | Rename-Item -NewName { $_.name -Replace '\.CSV$', '.XML' } Da das Merkmal G1T3F variieren kann, ebenso 3100 matche ich wie folgt: G1T3F mit "G[0-9]{1}T[A-Z0-9]{2} und 3100 mit "31[0-9]{2}"" Wenn beide Bedingungen erfüllt sind, soll dewr Dateiname von der Endung .csv nach .xml umbenannt werden. Leider funktioniert das nicht. Es wird z.B. auch der Dateiname TEST.BARN.G9T3F.02981185.B200225.T014508.X02.CSV umbenannt. Kann mir jemand erklären warum es so nicht funktioniert und hätte einen Lösungsvorschlag ? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 29. Juni 2020 Melden Teilen Geschrieben 29. Juni 2020 (bearbeitet) vor 4 Stunden schrieb epsodus: Da das Merkmal G1T3F variieren kann, ebenso 3100 Was genau heißt "kann variieren"? Zitat Es wird z.B. auch der Dateiname TEST.BARN.G9T3F.02981185.B200225.T014508.X02.CSV umbenannt. Kann mir jemand erklären warum es so nicht funktioniert und hätte einen Lösungsvorschlag ? Das Pattern "G[0-9]{1}T[A-Z0-9]{2}" matched eben auch "G9T3F". Du sagst G1T3F kann variieren und auch 3100 ... warum soll also der Dateiname "TEST.BARN.G9T3F.02981185.B200225.T014508.X02.CSV" dann nicht auch passen? Übrigens: wenn Du nur nach einem Zeichen suchst, kannst Du den Quantifier "{1}" weglassen. EDIT: Wenn ich es richtig verstanden habe, könntest Du die beiden Pattern quasi verbinden ... so hier: $collection = @( 'TEST.BARN.G1T3F.02983100.B200225.T014508.X02.CSV', 'TEST.BARN.G1B53.02983104.D200225.T014508.C02.0400.CSV', 'TEST.BARN.G9T3F.02981185.B200225.T014508.X02.CSV' ) foreach ($item in $collection) { if ($item -match 'G[0-9]T[A-Z0-9]{2}.{5}31[0-9]{2}') { "$Item - cool" } else { "$item - uncool" } } bearbeitet 29. Juni 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 30. Juni 2020 Melden Teilen Geschrieben 30. Juni 2020 Nutze -WhatIf oder führe die Zeilen bis zum Rename aus, dann kannst du prüfen / debuggen, welche Dateien gefunden werden. Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 2. Juli 2020 Melden Teilen Geschrieben 2. Juli 2020 Die Irritation kommt daher, daß der Dateiname kein "31" enthält. Und bei mir matcht das auch nicht: PS C:\WINDOWS\system32> "TEST.BARN.G9T3F.02981185.B200225.T014508.X02.CSV" -match "31" False Da fehlt irgendeine Info für uns. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 2. Juli 2020 Melden Teilen Geschrieben 2. Juli 2020 vor 1 Stunde schrieb daabm: Da fehlt irgendeine Info für uns. Vor allem fehlt eine Rückmeldung. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.