You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

路径不存在时,如何将8.3短路径转换为完整路径?

8.3短路径转长路径(路径不存在时的处理)

常规的Get-Item方法仅能在目标文件/目录存在时将8.3短路径转换为完整长路径,当路径不存在时会抛出“目标不存在”的错误:

  • 有效代码(路径存在时):

    $TargetPath = "存在的文件或文件夹的8.3短路径"
    (Get-Item -LiteralPath $TargetPath).FullName
    
  • 报错代码(路径不存在时):

    $TargetPath = "不存在的文件或文件夹的8.3短路径"
    (Get-Item -LiteralPath $TargetPath).FullName
    

核心限制

8.3短路径与长路径的映射关系存储在NTFS文件系统的元数据中,仅当文件/目录实际存在时,系统才会保留对应的映射记录。如果目标路径不存在,系统没有相关数据,无法直接获取准确的原始长路径。

折中处理方案

可以通过拆分路径,逐段转换存在的父目录部分,不存在的部分保留短名称(或尝试基于常见命名推测,但推测结果不保证准确)。以下是PowerShell实现示例:

function Convert-ShortPath {
    param([string]$ShortPath)
    
    $currentPath = ''
    # 拆分路径段
    $segments = $ShortPath -split '\\'
    
    foreach ($seg in $segments) {
        if (-not $seg) { continue }
        $testPath = Join-Path $currentPath $seg
        try {
            # 尝试获取当前段的长路径(仅当路径存在时有效)
            $item = Get-Item -LiteralPath $testPath -ErrorAction Stop
            $currentPath = $item.FullName
        }
        catch {
            # 路径不存在时,保留短名称继续拼接
            $currentPath = Join-Path $currentPath $seg
        }
    }
    
    return $currentPath
}

# 示例调用:转换包含不存在项的短路径
Convert-ShortPath "C:\PROGRA~1\UNINST~1\MISSIN~1.EXE"

该方法仅能将存在的父目录部分转换为长路径,不存在的文件/子目录段仍会保留短名称,无法还原出原本的长路径(因为系统无记录)。


内容的提问来源于stack exchange,提问作者Tanaka Saito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:57:43