2009-10-06 4 views
19

Ich möchte alle JPG-Dateien in einem Ordner in einheitliche Konvention wie Picture00000001.jpg umbenennen, wobei 00000001 ein Zähler ist.Wie können Dateien durchgeschleift und mit PowerShell umbenannt werden?

Es wäre ein Spaziergang im Park in C#, aber ich würde denken, das ist die Art von Brot und Butter Zeug, für die PowerShell gemacht wurde.

Ich vermute, so etwas wie

$files = ls *.jpg 
$i=0 
foreach($f in $files) { Rename-Item $f -NewName "Picture"+($i++)+".jpg" } 

Aber bevor ich das Gas auf diese treffen würde Ich mag 1) formatieren Sie den Zähler, und 2) einen Sinn haben, dass dies in der Tat ist auch eine gute Idee, .

Wenn dies mehr wie OCD klingt als eine gute Idee, sprechen Sie bitte.

Antwort

23

Sie können dies recht einfach in Powershell zu erhalten:

ls *.jpg | Foreach -Begin {$i=1} ` 
    -Process {Rename-Item $_ -NewName ("Picture{0:00000000}.jpg" -f $i++) -whatif} 

Wenn Sie‘ Suchen Sie nach dem "Basisname" und Wenn Sie auf PowerShell 2.0 sind, verwenden Sie einfach die Basename-Eigenschaft, die PowerShell jedem FileInfo-Objekt hinzufügt:

ls *.jpg | Format-Table Basename 

Beachten Sie, dass die PowerShell Community Extensions auf PowerShell 1.0 die gleiche Basename-Eigenschaft hinzufügt.

Wenn es die Absicht, einen Zähler Zeichenfolge an den Basisnamen der Datei während des Umbenennungsoperation anhängen wird dann versuchen, diese:

ls *.jpg | Foreach {$i=1} ` 
    {Rename-Item $_ -NewName ("$($_.Basename){0:00000000#}.jpg" -f $i++) -whatif} 
+0

Sorry für die Trennung zwischen Titel und Frage - ich habe den Titel geändert. –

+0

Kein Problem, ich habe meine Antwort entsprechend aktualisiert. –

+0

Whoa, Sie können einen 'begin'- und 'process'-Skriptblock individuell für' ForEach-Object' definieren? Ich muss einige Golf-Probleme erneut aufsuchen. – Joey

2

diese versuchen, die FilenameWithOutExtension

$ f.DirectoryName + "\" + $ f.BaseName

Verwandte Themen