Powershell解析文件与环境路径

时间:2012-10-09 19:24:42

标签: powershell path environment-variables

我有以下函数,它接受一个文件名并在本地解析它,或者用环境路径解析它。我正在寻找与命令行相同的功能:

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
}

我的问题:

  1. 是否有内置函数可以执行此操作?
  2. 或者社区脚本哪个更好?
  3. 上面我的功能是否遗漏了什么?

2 个答案:

答案 0 :(得分:4)

对于exes(以及$ env:PATHEXT中的其他扩展名),您可以使用Get-Command。它将搜索路径,例如:

C:\PS> Get-Command ProcExp.exe | Foreach {$_.Path}
C:\Bin\procexp.exe

答案 1 :(得分:2)

想不出任何内置函数可以做到这一点。我会使用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
        }
    }
}