如何更改大写以更正特定单词的大小写?

时间:2019-09-17 14:53:03

标签: powershell rename

嗨,我需要更改特定单词的大小写

示例:

  • RX PPLLC-史密斯博士-约翰史密斯-俄亥俄州-疼痛-利多卡因
  • RX PPLLC-史密斯博士-约翰史密斯-俄亥俄州-疼痛-非诺洛芬
  • RX PPLLC-史密斯博士-约翰史密斯-俄亥俄州-皮肤病-地弗拉松
  • RX PPLLC-Smith博士-John Smith-俄亥俄州-SCAR-Silvex Pad

应该是这样的:

  • RX PPLLC-史密斯博士-约翰史密斯-俄亥俄州-疼痛-利多卡因
  • RX PPLLC-史密斯博士-约翰史密斯-俄亥俄州-疼痛-非诺洛芬
  • RX PPLLC-史密斯博士-约翰·史密斯-俄亥俄州-皮炎-地弗拉松
  • RX PPLLC-Smith博士-John Smith-俄亥俄州-疤痕-Silvex Pad

我已经尝试过了:

get-childitem -recurse | rename-item -newname { $_.name -replace "PAIN","Pain" }
get-childitem -recurse | rename-item -newname { $_.name -replace "SCAR","Scar" }
get-childitem -recurse | rename-item -newname { $_.name -replace "DERMATITIS","Dermatitis" }

现在的问题是,无论如何,我可以将其合并为一个代码吗?对于其他文件名,最后的单词并不总是2个或更多。

谢谢。

1 个答案:

答案 0 :(得分:0)

您似乎需要使用TitleCase重命名文件。请注意,转换为TitleCase不适用于所有鞋面。因此,我们将需要输入字符串ToLower()

Get-ChildItem -Path "C:\Path" -Recurse | Rename-Item -NewName {$_.Name -replace "$($_.Name)", "$((Get-Culture).TextInfo.ToTitleCase($_.Name.ToLower()))"}

另一个说明,这也会将“ RX PPLLC”也更改为TitleCase。如果您需要忽略它,则可能需要使用substring来解决它。

更新:-如果要保留“ RX PPLLC”:

Get-ChildItem -Path "C:\Test" -Recurse | Rename-Item -NewName {
    $lefSide = $_.Name.Substring(0,$_.Name.IndexOf('-'))
    $rightSide = $_.Name.Substring($_.Name.IndexOf('-') + 1)
    $rightSide = $((Get-Culture).TextInfo.ToTitleCase($rightSide.ToLower()))
    $newName = $leftSide + $rightSide
    $_.Name -replace "$($_.Name)", "$newName"    
}

有很多更好的方法可以做到这一点。基本上,这会将文件名分成两个字符串(左侧和右侧)。它将更改权限,然后将其放回名为$newName的变量中。仅当您的文件名包含-时,此方法才有效。如果您想处理这些情况,则需要一个条件或regEx ...这只是一个简单的示例