Being married to someone who majored in English has made me extra conscious of my spelling and capitalization. So, for my blog posts, I’ve written a script to help me ensure my titles are properly capitalized. It is not perfect (i.e. it doesn’t do a dictionary lookup), but it follows the basic APA guidelines. I thought I would share it, in case others would find it useful.
# Split the string into individual words
$words = $string.Split()
[System.Collections.Generic.List[PSObject]]$stringArray = @()
For($i = 0; $i -lt $words.Count; $i++){
# Capitalize words of four or more letters, the first word, and the last word
if($words[$i].Length -gt 3 -or $i -eq 0 -or $i -eq ($words.Count - 1)){
# account for hyphen and capitalize words before and after
$words[$i] = @($words[$i].Split('-') | ForEach-Object{
$_.Substring(0,1).ToUpper() + $_.Substring(1,$_.Length-1)
}) -join('-')
}
# and the capitalized string to the array
$stringArray.Add($words[$i])
}
# join the words back together to form your title
$stringArray -join(' ')
PS C:\> $string = 'properly capitalize a title using PowerShell'
>> $words = $string.Split()
>> [System.Collections.Generic.List[PSObject]]$stringArray = @()
>> For($i = 0; $i -lt $words.Count; $i++){
>> # Capitalize words of four or more letters, the first word, and the last word
>> if($words[$i].Length -gt 3 -or $i -eq 0 -or $i -eq ($words.Count - 1)){
>> # account for hyphen and capitalize words before and after
>> $words[$i] = @($words[$i].Split('-') | ForEach-Object{
>> $_.Substring(0,1).ToUpper() + $_.Substring(1,$_.Length-1)
>> }) -join('-')
>> }
>> # and the capitalized string to the array
>> $stringArray.Add($words[$i])
>> }
>> $stringArray -join(' ')
Properly Capitalize a Title Using PowerShell