【问题标题】:Powershell resolving file with environmental path具有环境路径的 Powershell 解析文件
【发布时间】:2012-09-30 04:39:30
【问题描述】:

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

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. 上面的函数是否遗漏了什么?

【问题讨论】:

  • 你想要这个用于 exe 文件还是任何文件?
  • 我希望它适用于所有文件,但如果有一种简单的方法可以适用于可执行文件(和 bat/ps1 文件),请也发布它。但是请注意,PS 提示符允许您从 PATH 打开任何文件类型。唯一的问题是它不会自动完成非可执行文件。
  • Get-Command 将为路径中的 exe 执行此操作。
  • @acv55 关于此评论“PS 提示符允许您从 PATH 打开任何文件类型” - 我认为这不是真的。它只会找到那些扩展名在 $env:PATHEXT 中的文件。

标签: powershell path environment-variables


【解决方案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
        }
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2013-06-05
      • 2013-06-04
      • 1970-01-01
      相关资源
      最近更新 更多