在PowerShell中重命名文件

时间:2011-04-02 16:05:07

标签: powershell

如何重命名文件夹中的每个文件:

模式是:(文件名的第一部分).digit_(endoffilename)

例如

a.1_f
b.2_f
c.3_g

我想用

替换它
a.01_f
b.02_f
c.03_ g

...

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

试试这个:

Get-ChildItem | Where {!$_.PSIsContainer} | 
    Rename-Item -NewName {$_ -replace '([^.]+)\.(\d)(\w)', '$1.0$2$3'} -wh

或者,如果您有超过九个文件:

gci | ? {!$_.PSIsContainer -and $_.Name -match '([^.]+\.)(\d)(\w+)'} |  
  rni -NewName {$matches[1] + ("{0:00}" -f [int]$matches[2]) + $matches[3]} -wh

第二个示例使用别名来缩短命令(更容易输入)。 gciGet-ChildItem的别名,?Where-Object的别名,rniRename-Item的别名。 -wh调用WhatIf功能,PowerShell将在其中显示它将执行的操作,以便您可以旋转命令,直到您对结果的内容感到满意为止。然后删除-wh以实际执行它。

答案 1 :(得分:0)

执行此操作的一种方法是通过正则表达式拆分文件,然后从部件中汇编新文件名,然后是Rename-Item

  • 与您的文件匹配的正则表达式可能是\w+\.\d+_\w
  • 如果您有1,则要打印“001”,您可以使用格式运算符,例如“{0:000}” - f 1
  • 要循环浏览文件,请使用Get-ChildItem& Foreach-Object,或者我喜欢写ls | % {}