我有一系列文件夹和子文件夹,以这种方式构建:
文件名包含我想删除的多余字符串字符,我想将其文件名转换为更简单的顺序格式(0.jpg,1.jpg等)。
我尝试使用一些不同的PowerShell示例来实现此功能。我有递归搜索功能,但是当我尝试重命名InvalidOperationException
循环中的文件时,我收到有关ForEach-Object
的错误。此外,我担心我的顺序编号没有被重置'对于重命名文件的每个文件夹。
$i = 0
Get-ChildItem -Filter "*.jpg" -Recurse | ForEach-Object {
Rename-Item $_ -NewName ('$i.jpg' -f $i++)
}
所以,有两个问题:
Rename-Item
?答案 0 :(得分:2)
如果采取两步方法,首先获取包含jpg的所有文件夹然后遍历此列表,从1开始就没有问题。但是我总是使用前导零进行重新编号。
$BaseFld = "Q:\Test\"
$Ext = "*.jpg"
$jpgFolders = gci $($BaseFld+$Ext) -Recurse |
Select -ExpandProperty Directory -Unique |
select -ExpandProperty Fullname | Sort
ForEach ($Folder in $jpgFolders) {
Set-location $Folder
$i = 1
Get-ChildItem $Ext | %{Ren $_ -NewName ('{0:D4}.jpg' -f $i++) -whatif}
}
如果ouptut适合你,请删除最后一行的-whatif
答案 1 :(得分:0)
其他方法
$rootdir="C:\temp"
gci $rootdir -Recurse -Directory | %{$i=1; gci $_.FullName -Recurse -File -Filter "*.jpg" | %{Ren $_.FullName -NewName ('{0}.jpg' -f $i++)} }