0

我需要使用 powershell 3.0 将每个单词的第一个字母大写

我一直在疯狂地试图弄清楚这一点。

任何帮助,将不胜感激。

Function Proper( [switch]$AllCaps, [switch]$title, [string]$textentered=" ")
{ 
    if ($AllCaps)
        {$textentered.Toupper()}
    Elseif ($title)
        {$textentered -split " "

        $properwords = $textentered | foreach { $_ }


            $properwords -join " "
            $properwords.substring(0,1).toupper()+$properwords.substring(1).tolower()

            }
}
proper -title "test test"
4

1 回答 1

2

System.Globalization.TextInfo类有ToTitleCase你可以使用的方法,只需像往常一样将你的话加入一个字符串($lowerstring例如调用),然后使用 `Get-Culture cmdlet:: 调用该字符串上的方法:

$titlecasestring = (Get-Culture).TextInfo.ToTitleCase($lowerstring)

对于字符串连接,我倾向于使用以下格式:

$lowerstring = ("the " + "quick " + "brown " + "fox")

但以下也是有效的:

$lowerstring = 'the','quick','brown','fox' -join " "

$lowerstring = $a,$b,$c,$d -join " "

编辑:

根据您提供的代码,如果您传入的只是字符串中的一个短语,则不需要拆分/连接字符串,因此您需要以下内容

Function Proper{
    Param ([Parameter(Mandatory=$true, Position=0)]
           [string]$textentered,
           [switch]$AllCaps,
           [switch]$Title)

    if ($AllCaps){$properwords = $textentered.Toupper()} 

    if ($title) {
                 $properwords = (Get-Culture).TextInfo.ToTitleCase($textentered)
                }

    if ((!($Title)) -and (!($AllCaps))){
        Return $textentered}
} 

Proper "test test" -AllCaps
Proper "test test" -Title
Proper "test test"

在该Param ()块中,我将 $textentered 参数设置为强制参数,并且它必须是第一个参数(Position = 0)。

如果 AllCaps 或 Title 参数均未传递,则原始输入字符串将原封不动地传回。

于 2013-07-23T02:33:30.137 回答