Powershell大小写敏感重命名

4

我目前使用Filebot来处理我个人撕裂/下载的电影的初始命名。当它识别到来源为蓝光的电影时,会标记该电影:

Movie Title (Year) (BluRay)

我希望有一个区分大小写的PowerShell脚本,将"BluRay"重命名为"Bluray"。我的当前脚本如下:
Dir | Rename-Item –NewName { $_.name –replace "BluRay","Blu" } >$null 2>&1
Dir | Rename-Item –NewName { $_.name –replace "Blu","Bluray" } >$null 2>&1

这很好用,但我不想让它重命名每个文件夹(因为我使用基于修改日期的备份/同步软件),因为它不区分大小写并且会误报某些电影,比如:
Deep Blue Sea (1999) (Bluray)

如果我能将它设为区分大小写(首选方法)或排除单词“Blue”,那就更有效率。

1个回答

3

大小写敏感取决于使用的运算符。大多数比较运算符都有大小写敏感变体,例如-ceq、-clike、-creplace等。使用Where-Object可以使其针对并仅更改所需部分:

Dir | Where-Object Name -cmatch 'BluRay' | Rename-Item –NewName { $_.name –creplace "BluRay","Blu" } >$null 2>&1

或者如果有某种原因需要捕获小写字母b:

Dir | Where-Object Name -cmatch '[bB]luRay' | ForEach-Object {
    $Item = Rename-Item $_.FullName -NewName ($_.Name –replace "BluRay","Blu") -PassThru
    $null = Rename-Item $Item.FullName -NewName ($Item.Name -replace 'Blu', 'Bluray')
}

克里斯


我按原样复制并粘贴了你的代码,但是收到了一些错误信息,类似于代码块之类的东西。后来我意识到,尽管我的原始脚本可以遍历并重命名每个电影文件夹,但它并没有影响修改日期/时间。因此,我只需在脚本中添加一行额外的代码来捕获误报(将Bluraye更正为Blue)。虽然如此,还是非常感谢你的帮助! - Failstyle
我已经编辑了上面的示例,NewName的脚本块仅在单个管道中运行时才有效。添加了PassThru以捕获重命名的第一步。对此表示抱歉。 - Chris Dent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接