Jump to content

Get-ChildItem und match


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 ?

Link zu diesem Kommentar
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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...