如何使用PowerShell循环文件并重命名?

时间:2009-10-06 00:17:00

标签: powershell

我想将文件夹中的所有jpg文件重命名为像Picture00000001.jpg这样的统一约定,其中00000001是一个计数器。

这将是在C#公园散步,但我认为这是PowerShell制作的面包和黄油的东西。

我猜是像

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

但在此之前,我希望1)格式化计数器,2)有一种感觉,这实际上是一个好主意。

如果这听起来更像强迫症,请大声说出来。

2 个答案:

答案 0 :(得分:24)

您可以在PowerShell中轻松完成此操作:

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

如果您正在寻找“basename”,如果您使用的是PowerShell 2.0,只需使用PowerShell添加到每个FileInfo对象的Basename属性:

ls *.jpg | Format-Table Basename

请注意,在PowerShell 1.0上,PowerShell Community Extensions添加了相同的Basename属性。

如果意图是在重命名操作期间将计数器字符串附加到文件的基本名称,那么试试这个:

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

答案 1 :(得分:2)

尝试此操作以获取FilenameWithOutExtension

$ f.DirectoryName +“\”+ $ f.BaseName

相关问题