Powershell Test-Path输出-eq“False”不起作用

时间:2018-05-16 08:45:42

标签: powershell path

所以我正在尝试检查路径是否可用。我使用Test-Path

执行此操作

看起来像这样:

$c="C:\"
$d="D:\"
$e="E:\"

if(Test-Path $c -eq "False"){
}
elseif(Test-Path $d -eq "False"){
}
elseif(Test-Path $e -eq "False"){
}
else{
"The File doesn't exist"
}

如果错误看起来像这样,我做错了什么:

Test-Path : A parameter cannot be found that matches parameter name 'eq'.
At C:\Users\boriv\Desktop\ps\Unbenannt1.ps1:23 char:17
+ If(Test-Path $c -eq "False"){
+                 ~~~
+ CategoryInfo          : InvalidArgument: (:) [Test-Path], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.TestPathCommand`

3 个答案:

答案 0 :(得分:4)

您不想比较Test-Path cmdlet的结果,因此需要使用括号,否则-eq参数会传递给Test-Path cmdlet,这就是原因所在你得到错误。

我会使用-not运算符,因为我发现它更具可读性。例如:

if(-not (Test-Path $c)) {
}

答案 1 :(得分:2)

Test-Path $c包裹在括号中,以便首先评估它们:

$c="C:\"
$d="D:\"
$e="E:\"

if((Test-Path $c) -eq "False"){
    Write-Output '$c is false'
}
elseif((Test-Path $d) -eq "False"){
    Write-Output '$d is false'
}
elseif((Test-Path $e) -eq "False"){
    Write-Output '$e is false'
}
else{
    "The File doesn't exist"
} 

答案 2 :(得分:2)

另一个选项而不是使用if/elseif/else是将路径放入数组并循环遍历它,直到找到有效路径。

这样,代码对于任意数量的路径都保持不变。

$paths = "C:\","D:\","E:\"

foreach ($path in $paths) {
    if(Test-Path $path){
        $validpath = $path
        break
    }
}

if ($validpath){
    "File exists here: $validpath"
}
else {
    "The File doesn't exist in any path"
}