Get-Item $Path | Rename-Item -NewName {
$tokens = $_.Name -split '_' # split the name into tokens
'{0}_{1}' -f $tokens[1], $tokens[0] # output with tokens swapped
} -WhatIf
-WhatIf 预览操作。
如您所见,您可以将解析作为传递给Rename-Item 的-NewName 参数的脚本块的一部分进行。
由于-NewName 只需要项目的文件或目录新的名称(而不是完整路径),$_.Name 被解析并且它的转换是(隐式)输出。
这是一个更简洁的公式,灵感来自LotPings 的提示:
Get-Item $Path | Rename-Item -NewName { -join ($_.Name -split '(_)')[-1, 1, 0] }
这依赖于 PowerShell 通过指定索引的数组(列表) 对数组进行切片的能力:-1, 1, 0 有效地反转了$_.Name -split '(_)' 返回的数组元素 - 请注意(...)围绕_,确保_ 的实例包含在返回的令牌数组中; -join 运算符的一元形式然后连接反转数组的元素。
注意:我假设$Path 包含一个仅匹配感兴趣目录的通配符表达式。
如果您只需要明确匹配目录,请将Get-ChildItem 与
-Directory 开关一起使用:
Get-ChildItem $Path -Directory
使用通配符模式专门匹配您问题中的示例名称:
Get-ChildItem [a-z][a-z]_[0-9][0-9][0-9][0-9] -Directory