使用 Powershell 2.0 解析和切换文件夹名称的元素

Parse and Switch Elements of Folder Names with Powershell 2.0

我一直在尝试编写一个 powershell 脚本(我的第一个)

  1. 仅解析目录中的文件夹
  2. select 仅符合特定命名约定的文件夹 ('SEASON YEAR')
  3. 切换名称元素的顺序('YEAR SEASON')

我最终使用程序 BulkRenameUtility 使用正则表达式 ^(\w+) (\d+) 并将令牌顺序切换为 $2 $1 来执行此操作——但是,我仍在学习 Powershell 并希望能够在不使用外部程序的情况下执行此操作。

因此,再次重申,在 C:\Users\Test

有文件夹和文件.. 例如,一些文件夹名为 Spring 2015Fall 2014。但是,其他文件夹的名称如 geogex。文件的名称如 ENG1A SPRING 2015.odtuntitled_0.odt.

如何只将名称为 "Spring 2015" 的文件夹的名称更改为“2015 Spring”、“2014 Fall”等?

我能够使用

 gci | ? {$_.PSIsContainer} | select-string -pattern '\d+' 

完成 1 和 2,但我坚持使用它来完成第 3 部分:实际上通过反转名称的元素来重命名。我试着把上面的放在一个变量中,就像这样:

gci | ? {$_.PSIsContainer} | select-string -pattern '\d+' | %{$data = $_.line; Write-Output "$data"};

然而,虽然上面的输出正是我想要的文件夹,但数组 $data 似乎只包含最后一行输出。这样:

gci | ? {$_.PSIsContainer} | select-string -pattern '\d+' | %{$data = $_.line; Write-Output "$data"};
$data 

将输出:

test 123
test 321
test 321

我不确定这是否是一个有效的开始方向。

如有任何帮助,我们将不胜感激。

这应该可以完成工作。

$Path = "C:\Users\Test"
$regex = "^(Spring|Summer|Fall|Winter)\s+\d{4}$"

Get-ChildItem $Path | 
    Where-Object {$_.PSIsContainer -and $_.Name -match $regex} | 
    Rename-Item -NewName {$split = $_.Name -split "\s+"; "{0} {1}" -f $split[1],$split[0]}

我们使用该正则表达式过滤出符合您约定的文件夹。使用特定的季节名称应该更有针对性。只找4个数字,年份就更缺了一点。

其他方法,但对于重命名,我只是在 space 上拆分名称并使用 -f 格式运算符反转输出。