我具有以下函数,该函数采用文件名并在本地或使用环境路径解析它。我正在寻找与您在命令行上获得的功能相同的功能:

function Resolve-AnyPath ($file)
{
    if ($result = Resolve-Path $file -ErrorAction SilentlyContinue)
    {
        return $result;
    }

    return ($env:PATH -split ';') |
        foreach {
            $testPath = Join-Path $_ $file
            Resolve-Path $testPath -ErrorAction SilentlyContinue
        } |
        select -first 1
}

我的问题:
  • 是否有执行此操作的内置函数?
  • 还是更好的社区脚本?
  • 我的上述功能是否错过任何事情?
  • 最佳答案

    想不到任何内置函数可以执行此操作。我会使用Test-Path摆脱那些SilentlyContinue:

    function Resolve-Anypath
    {
        param ($file)
    
        (".;" + $env:PATH).Split(";") | ForEach-Object {
            $testPath = Join-Path $_  $file
            if (Test-Path $testPath) {
                Write-Output ($testPath)
                break
            }
        }
    }
    

    09-07 03:47