我有以下函数,它接受一个文件名并在本地解析它,或者用环境路径解析它。我正在寻找与命令行相同的功能:
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
}
我的问题:
答案 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
}
}
}