如何用powershell小写除第一个字符以外的字符串

时间:2014-02-18 08:15:16

标签: powershell

如何使用powershell小写除第一个字符以外的字符串?

Get-ChildItem -r | Where {!$_.PSIsContainer} | Rename-Item -NewName {$_FullName.substring(0,1).toupper()+$_FullName.substring(1).tolower()}

崩溃,修复方法?

1 个答案:

答案 0 :(得分:4)

第一个问题是您在$_和属性之间缺少一个点。

第二个问题是FullName属性是对象的完整路径,包括驱动器和路径。因此,对第一个字符进行大写只会使驱动器号大写(它已经是大写)并且没有任何变化。使用Name属性将起作用,因为根本没有路径,没有路径Rename-Item将使用原始项目中的路径。

第三个较小的问题是你可以只过滤Get-ChildItem来只提供文件,而根本不需要第二步:

Get-ChildItem -recurse -File |
  Rename-Item -NewName {$_.Name.substring(0,1).toupper()+$_.Name.substring(1).tolower()}

您可能实际上想要在文件名中大写单独的单词,而不仅仅是对第一个字母进行大写。如果是这样,你可以这样做:

Get-ChildItem -recurse -File |
  Rename-Item -NewName  {(Get-Culture).TextInfo.ToTitleCase($_.Name)}

[编辑]然而,这也是扩展名的上限,所以实际上这更好:

Get-ChildItem -recurse -File | 
    Rename-Item -NewName {(Get-Culture).TextInfo.ToTitleCase($_.BaseName) +
        $_.Extension.ToLower()}