gpt4 book ai didi

powershell - 如何在 PowerShell 中获得正确(规范)大小写的路径?

转载 作者:行者123 更新时间:2023-12-04 13:24:35 26 4
gpt4 key购买 nike

我有一个脚本,它接受一个目录作为来自用户的参数。我想显示在 Windows 中显示的目录路径的名称。 IE。,

PS C:\SomeDirectory> cd .\anotherdirectory
PS C:\AnotherDirectory> . .\myscript.ps1 "c:\somedirectory"
C:\SomeDirectory

给定“c:\somedirectory”时如何检索“C:\SomeDirectory”?

最佳答案

接受的答案只会得到文件的正确大小写。父路径留给用户提供的案例。这是我的解决方案。

$getPathNameSignature = @'
[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
public static extern uint GetLongPathName(
string shortPath,
StringBuilder sb,
int bufferSize);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError=true)]
public static extern uint GetShortPathName(
string longPath,
StringBuilder shortPath,
uint bufferSize);
'@
$getPathNameType = Add-Type -MemberDefinition $getPathNameSignature -Name GetPathNameType -UsingNamespace System.Text -PassThru


function Get-PathCanonicalCase
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]
# Gets the real case of a path
$Path
)

if( -not (Test-Path $Path) )
{
Write-Error "Path '$Path' doesn't exist."
return
}

$shortBuffer = New-Object Text.StringBuilder ($Path.Length * 2)
[void] $getPathNameType::GetShortPathName( $Path, $shortBuffer, $shortBuffer.Capacity )

$longBuffer = New-Object Text.StringBuilder ($Path.Length * 2)
[void] $getPathNameType::GetLongPathName( $shortBuffer.ToString(), $longBuffer, $longBuffer.Capacity )

return $longBuffer.ToString()
}

我已将上述代码集成到 Resolve-PathCaseCarbon 的一部分PowerShell 模块。免责声明:我是 Carbon 的所有者/维护者。

关于powershell - 如何在 PowerShell 中获得正确(规范)大小写的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com