如何使用powershell小写除第一个字符以外的字符串?
Get-ChildItem -r | Where {!$_.PSIsContainer} | Rename-Item -NewName {$_FullName.substring(0,1).toupper()+$_FullName.substring(1).tolower()}
崩溃,修复方法?
答案 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()}