#---------------------------------------------------------------- # Dirname.ps1 #---------------------------------------------------------------- param ( [string]$name = $null ); $script:SEPARATOR = "\"; #---------------------------------------------------------------- # function Do-Basename #---------------------------------------------------------------- function Do-Basename() { param ( [string]$name = $null ); $basename = ""; if ( $name ) { if ( $name.EndsWith($script:SEPARATOR) ) { $name = $name.SubString(0, $name.Length -1); } $i = 0; for ($i = $name.Length-1; $i -ge 0; $i--) { if ( $name[$i] -eq $script:SEPARATOR ) { break; } } if ( $i -ge 0 ) { $basename = $name.SubString($i+1) } else { $basename = $name; } } $basename; } #---------------------------------------------------------------- # function Do-BasenameUnitTests #---------------------------------------------------------------- function Do-BasenameUnitTests() { $tests = @( @("foo", "foo"), @("foo\", "foo"), @("", ""), @("\foo", "foo"), @("\foo\", "foo"), @("\foo\bar", "bar"), @("\foo\bar\", "bar"), @("c:\foo", "foo"), @("c:\foo\bar", "bar"), @("c:\foo\bar\", "bar"), @("c:\foo\bar\ ", " "), @(".", "."), @("..", ".."), @(".\", "."), @("..\", ".."), @("..\.", "."), @("..\.\foo", "foo") ); $success = "PASS"; " {0,-15} {1,-15} {2,-15} {3}" -f ("Test", "Expected", "Found", "Pass"); foreach ($test in $tests) { $result = Do-Basename $test[0]; $status = $result -eq $test[1]; "({0,-15} -> {1,-15}) -> {2,-15} : {3}" -f ("""$($test[0])""", """$($test[1])""", """$($result)""", $status); #Write-Host "TEST: (""$($test[0])"" -> ""$($test[1])"") -> ""$result"" : $status"; if ( ! $status ) { $success = "FAIL"; } } "" "RESULT: $success"; } Do-Basename -name $name; #Do-BasenameUnitTests;