问题描述
我有多个来自相机的文件,名称为“00010001”、“00010002”等。这些文件类型(JPG、CR2、xmp、MOV)在一个文件夹中(比如 C:\camera)。
我需要在所有文件名的数字上加 10000,所以它变成了“00020001”、“00020002”等等。我想这可以用 powershell 中的一个简单脚本来完成,但我绝对没有这方面的经验。如果有人帮助我,我将不胜感激。谢谢。
解决方法
如果代码还应该处理 'C:\Camera' 子文件夹中的文件,您可以使用 -Recurse
和 -Include
参数:
(Get-ChildItem -Path 'C:\Camera' -File -Include '*.JPG','*.CR2','*.XMP','*.MOV' -Recurse) |
Where-Object { $_.BaseName -match '\d{8}' } |
Rename-Item -NewName { '{0:D8}{1}' -f ([int]$_.BaseName + 10000),$_.Extension } -WhatIf
但是,如果这不应该比根文件夹“C:\Camera”更深,那么请执行以下操作:
(Get-ChildItem -Path 'C:\Camera' -File) |
Where-Object { $_.BaseName -match '\d{8}' -and $_.Extension -match '\.(JPG|CR2|XMP|MOV)$' } |
Rename-Item -NewName { '{0:D8}{1}' -f ([int]$_.BaseName + 10000),$_.Extension } -WhatIf
一旦您满意代码会根据您的意愿创建新文件名,请移除安全开关 -WhatIf
说明:
- 获取文件夹中 BaseNames 由 8 位数字
($_.BaseName -match '\d{8}'
) 组成且扩展名为JPG
、.CR2
、.XMP
或 {{1} 的文件}} - 将该 BaseNaem 转换为整数并加上 10000
- 使用
.MOV
格式运算符重新组合文件名,其中模板字符串-f
确保所有(新)数字都以零为前缀,最多 8 位