所以我正在尝试检查路径是否可用。我使用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`
答案 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"
}