当CD刻录到工作副本时,SVN INFO在PowerShell中失败,同时拼写错误字母大小写的目录名称

时间:2017-02-06 15:23:32

标签: powershell svn case-sensitive ls pwd

当我使用Set-Location(又名cd)更改PowerShell窗口中的当前目录时,故意避免自动完成并在"错误"中键入名称。情况下...

PS C:\> Set-Location winDOWs

...然后Get-Location(又名pwd)将返回"错误"路径名称:

PS C:\winDOWs> Get-Location

Path
----
C:\winDOWs

这会导致svn info

出现问题
PS C:\svn\myDir> svn info --show-item last-changed-revision
2168
PS C:\svn\myDir> cd ..\MYDIR
PS C:\svn\MYDIR> svn info --show-item last-changed-revision
svn: warning: W155010: The node 'C:\svn\MYDIR' was not found.

svn: E200009: Could not display info for all targets because some targets don't exist

正如您所看到的,当用户没有输入工作副本目录的名称时,svn info失败了#34; myDir"在cd进入{。}}时使用正确的字母大小写。

有没有办法解决这个问题?我找不到合适的svn info参数。

另一种选择可能是覆盖PowerShell的cd别名,并确保在实际cd之前确定输入路径的字母大小写,但如何实现?例如Resolve-Path也会返回"错误"目录名称。

1 个答案:

答案 0 :(得分:1)

这样的事可能适合你:

Set-Location C:\winDOWs\sysTEm32    
$currentLocation = (Get-Location).Path
$folder = Split-Path $currentLocation -Leaf
$casedPath = ([System.IO.DirectoryInfo]$currentLocation).Parent.GetFileSystemInfos($folder).FullName

# if original path and new path are equal (case insensitive) but are different with case-sensitivity. cd to new path.
if($currentLocation -ieq $casedPath -and $currentLocation -cne $casedPath)
{
    Set-Location -LiteralPath $casedPath 
}

这将为您提供适合" System32"路径的一部分。您将需要以递归方式为所有路径段调用此段代码,例如: C:\ Windows,C:\ Windows \ System32等

最终递归函数

你走了:

function Get-CaseSensitivePath
{
    param([System.IO.DirectoryInfo]$currentPath)

    $parent = ([System.IO.DirectoryInfo]$currentPath).Parent
    if($null -eq $parent)
    {
        return $currentPath.Name
    }

    return Join-Path (Get-CaseSensitivePath $parent) $parent.GetDirectories($currentPath.Name).Name

}

示例:

Set-Location (Get-CaseSensitivePath C:\winDOWs\sysTEm32)