对文件或者文件夹实施重命名是一个常用操作,本文介绍如何使用 PowerShell 进行批量操作。

匹配变更

  Get-ChildItem F:\demo [-File] [-Directory] -Recurse |
  Select-Object {$_.Name -contains 'e'} |
  ForEach-Object { Rename-Item $_.FullName $_.Name.Replace('e','x') }

以上代码执行后,将获取 F:\demo 目录(及其子目录)内容,并将其中名称中含有 e 的部分变更为 x

Get-ChildItem 获取指定目录全部内容,声明 FileDirectory 用于筛选内容类型,Recurse 参数用于控制递归操作,简单地说就是控制获取内容的范围是否包含子目录。

Select-Object 用于筛选内容,本例的条件是:名称是否包含 e,符合条件的向下一步传递。

ForEach-Object 用于遍历传入的对象,在遍历过程中调用 Rename-Item 进行更名。

编号命名

  $i = 1

  Get-ChildItem F:\demo *.jpg -Recurse |
  ForEach-Object {
      $newName = 'pic_{0:d6}{1}' -f  $i, $_.Extension
      Rename-Item $_.FullName $newName
      $i++
  }

以上代码执行后,将获取 F:\demo 目录(及其子目录)内扩展名为 jpg 的内容,并将其中名称变更为 pic_ 后接六位数编号。

变量 newName 的值是一个生成字串,第一个替代值是项目编号,第二个替代值是项目扩展名信息。