多个文件名称中的Powershell偏移量由一个常量

Powershell offset number in name of multiple files by a constant

我有多个来自相机的文件,名称为“00010001”、“00010002”等。在一个文件夹(比如说 C:\camera)中有多种文件类型(JPG、CR2、xmp、MOV)。

我需要在所有文件名中的数字上加上 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.MOV
  • 将 BaseNaem 转换为整数并加上 10000
  • 使用 -f 格式运算符重新组合文件名,其中模板字符串 {0:D8}{1} 确保所有(新)数字都以最多 8 位的零为前缀