好的,所以我试图创建一个只重命名目录中文件的脚本。
目录中有2个文件夹,每个文件夹中有多张图片。
我正在使用递归来遍历所有这些。
我的目标是使用递增的数字重命名每个文件,但这不起作用,而是脚本将使用名称数字(1,1,1,1,2,2,2,2,2,3来重命名文件,3,3,3,4,4,4,4等)
有人可以帮助解决此问题吗?任何回应表示赞赏。
有效方法:
如果我将脚本块中的内容替换为:
M[s][0] = 0
它将毫无问题地增加(1、2、3、4等)
这不起作用:
echo $i
我要使用的代码:
$targetPath | Rename-Item -NewName {$_.Directory.Name + '_' + $I}
答案 0 :(得分:0)
您也需要在for循环中遍历文件,如下所示:
for($i = 0 ; $i -le $numberOfFiles ; $i++ ) {
#use indexing to pick the nTh file from the list
$targetPath[$i] | Rename-Item -NewName $i -WhatIf
}
请注意,由于PowerShell从零开始索引,因此我将$i
的初始设置降低为零。
但是我不会在生产中这样做,许多人发现for循环的逻辑很难理解。最好直接遍历文件,然后用这种方式重命名,就像这样。
#Set initial value to zero
$i = 0
ForEach ($file in $targetPath){
$newName = "$($file.BaseName)_$i$($file.Extension)"
Rename-Item -Path $file -NewName $newName -WhatIf
$i++
}
答案 1 :(得分:0)
要使文件重命名后仍然可用,
Rename-Item
接受管道输入,因此不需要foreach $Counter = 0
Get-ChildItem -File -path C:\Users\Alban\Pictures\Joshua32GBBackUp -Recurse|
Rename-Item -NewName {'File_{0:D3}{1}' -f $Script:Counter++,$_.Extension} -WhatIf
如果输出看起来正常,请删除结尾的-WhatIf