Benutzer mit den meisten Antworten
Zusatz an Dateiname anhängen

Frage
-
Guten Morgen,
ich würde gern einen Ordner mit Dateien auslesen, und an das Ender der Datei eine gleiche Zeichenfolge schreiben. Leider habe ich keinen Weg gefunden einen Dateinamen so zu bearbeiten
[String] $path = "C:\...\Ordner"
Get-Childitem -path $path | Rename-Item -NewName {$_.Name -replace 'aktuellenDateinamen','aktuellenDateinamen+zeichenfolge'}
Kann dies so in der Art realisiert werden? Über eine kurze Hilfestellung würde ich mich freuen.
Viele Grüße
Marius
Antworten
-
Mahlzeit Marius! ;-)
1.)
Ein Datei Objekt hat in PowerShell mehrere Namens Komponenten die du nutzen kannst- Fullname: ist der volle Pfad zur Datei
- Name: ist der Name der Datei, ohne Pfad, mit Dateierweiterung (.exe, .txt usw...)
- Basename: ist der Dateiname, ohne Extension und ohne Pfad.
- Extension: ist die Dateierweiterung mit Punkt (.exe, .txt usw...)
2.)
-replace benutzt Regular Expressions deshalb muss man hir eventuelle Sonderzeichen in den Dateinamen Maskieren (escapen).3.)
Du benutzt die Anführungszeichen nicht richtig. Lies dazu mal in der PowerShell Hilfe das Thema about_Quoting_Rules:http://www.colorconsole.de/PS_Windows/de/about_Quoting_Rules.htm
$path = 'C:\...\Ordner' $Ersetzung = 'NEUEZEICHENFOLGE' Get-Childitem -path $path | Rename-Item -NewName {$_.Name -replace ([System.Text.RegularExpressions.Regex]::Escape($_.Basename)),"$($_.Basename)$Ersetzung"} -WhatIf
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert Marius El Freitag, 6. Februar 2015 12:38
-
Ja, das geht fast genau so. Erklärungen in-line:
[String] $path = "D:\tmp\test" $newstring = "_ABC" # Dateien Auslesen, Folder filtern $Files = Get-Childitem -path $path | Where-Object { !$_.PSIsContainer } foreach ($file in $files) { # Neuen Namen zusammenbauen (Basename = Dateiname ohne extension) $newname = $file.basename + $newstring + $file.Extension # Umbenennen Rename-Item -Path $File.fullname -NewName $newname -WhatIf }
#
# und das Gleiche nochmal als Einzeiler
#
GCI $path | ? { !$_.PSIsContainer } | % { Rename-Item $_.fullname ($_.basename + $newstring + $_.Extension) -WhatIf }
Wenn das Ergebnis zufriedenstellend ist, kannst du den -whatif Schalter entfernen.
Grüße, Denniver
- Bearbeitet Denniver ReiningMVP, Moderator Freitag, 6. Februar 2015 12:06
- Als Antwort vorgeschlagen Peter Kriegel Freitag, 6. Februar 2015 12:29
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 8. März 2015 00:14
Alle Antworten
-
Mahlzeit Marius! ;-)
1.)
Ein Datei Objekt hat in PowerShell mehrere Namens Komponenten die du nutzen kannst- Fullname: ist der volle Pfad zur Datei
- Name: ist der Name der Datei, ohne Pfad, mit Dateierweiterung (.exe, .txt usw...)
- Basename: ist der Dateiname, ohne Extension und ohne Pfad.
- Extension: ist die Dateierweiterung mit Punkt (.exe, .txt usw...)
2.)
-replace benutzt Regular Expressions deshalb muss man hir eventuelle Sonderzeichen in den Dateinamen Maskieren (escapen).3.)
Du benutzt die Anführungszeichen nicht richtig. Lies dazu mal in der PowerShell Hilfe das Thema about_Quoting_Rules:http://www.colorconsole.de/PS_Windows/de/about_Quoting_Rules.htm
$path = 'C:\...\Ordner' $Ersetzung = 'NEUEZEICHENFOLGE' Get-Childitem -path $path | Rename-Item -NewName {$_.Name -replace ([System.Text.RegularExpressions.Regex]::Escape($_.Basename)),"$($_.Basename)$Ersetzung"} -WhatIf
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert Marius El Freitag, 6. Februar 2015 12:38
-
Ja, das geht fast genau so. Erklärungen in-line:
[String] $path = "D:\tmp\test" $newstring = "_ABC" # Dateien Auslesen, Folder filtern $Files = Get-Childitem -path $path | Where-Object { !$_.PSIsContainer } foreach ($file in $files) { # Neuen Namen zusammenbauen (Basename = Dateiname ohne extension) $newname = $file.basename + $newstring + $file.Extension # Umbenennen Rename-Item -Path $File.fullname -NewName $newname -WhatIf }
#
# und das Gleiche nochmal als Einzeiler
#
GCI $path | ? { !$_.PSIsContainer } | % { Rename-Item $_.fullname ($_.basename + $newstring + $_.Extension) -WhatIf }
Wenn das Ergebnis zufriedenstellend ist, kannst du den -whatif Schalter entfernen.
Grüße, Denniver
- Bearbeitet Denniver ReiningMVP, Moderator Freitag, 6. Februar 2015 12:06
- Als Antwort vorgeschlagen Peter Kriegel Freitag, 6. Februar 2015 12:29
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 8. März 2015 00:14