使用命令
重命名pdf文件get-childitem | % { rename-item $_ "2017-$_"}
正确重命名33个文件,但对33个以上的文件应用相同的命令会产生类似2017-2017-2017 ...- original.name的文件名。
如何克服我没有找到任何解释的限制?
答案 0 :(得分:2)
由于Rename-Item接受管道输入,因此不需要ForEach,
排除以2017-
开头的文件:
Get-ChildItem *.pdf -exclude 2017-*.pdf |
Rename-Item -Newname { $_.Name -replace '^','2017-' } -whatif
排除任何year / 4digit-number前缀:
Get-ChildItem *.pdf |
Where-Object Name -notmatch '^\d{4}-' |
Rename-Item -Newname { $_.Name -replace '^','2017-' } -whatif
如果输出看起来没问题,请删除-whatif
答案 1 :(得分:1)
看起来你的代码正在追逐它的尾部(即它重命名已经重命名的东西)。将文件列表捕获到变量中,然后遍历该文件,重命名捕获的文件列表:
$filesToRename = Get-ChildItem -Filter '*.pdf'
$filesToRename | ForEach-Object {
Rename-Item -Path $_.FullName -NewName "2017-$($_.FullName)"
}
如果要排除已重命名的文件:
$prefix = '2017-'
$filesToRename = Get-ChildItem -Filter '*.pdf' | Where-Object { !$_.Name.StartsWith($prefix) }
$filesToRename | ForEach-Object {
Rename-Item -Path $_.FullName -NewName "$prefix$($_.FullName)"
}