Test-Path if 语句条件不起作用

Test-Path if statement conditions not working

提问人:jyorkie 提问时间:11/17/2023 更新时间:11/18/2023 访问量:45

问:

我正在尝试让我的脚本通过 excel 工作表并打印出找不到文件的任何结果,但是,if 语句不起作用。我将需要 if 语句条件在将来工作,以确保如果有一个 png 和一个 jpeg 文件,或者一个 jpeg 和一个 png 供工作人员使用,它不会崩溃,而是我可以指示它尝试不同的文件。 也许我做错了什么?我已经用 1 个 True 或 False 尝试过,但理想情况下我需要对照所有 3 个进行检查。

Install-Module -Name ImportExcel
$spreadSheetData = Import-Excel "C:\Users\,,,\Documents\Book2.xlsx" -HeaderName "Name"

foreach($row in $spreadSheetData) {
$var = $row.Name  
$Apath = Test-Path "C:\Users\,,,\Documents\Staff Photos\New\$var.jpg", "C:\Users\,,,\Documents\Staff Photos\New\$var.png", "C:\Users\,,,\Documents\Staff Photos\New\$var.jpeg"
 if ($Apath -eq $False, $false, $false ){ Write-Host $Apath $var }
}

输出:

True False False Si...
True False False Mo...
True False False Su...
False True False Ma...
True False False Ka...

理想情况下,这些都不应该被打印出来,因为只有当所有 3 个都是假的时,它才应该打印出来。

PowerShell的

评论

7赞 Santiago Squarzon 11/17/2023
您正在尝试比较 2 个数组是否相等,但数组不具有可比性。你可以把你的条件换成if ($Apath -notcontains $true)
0赞 jyorkie 11/17/2023
如果 ocndition 被忽略,我会得到相同的结果,除了它的 False False False Si...假假假等

答:

1赞 Eric S 11/17/2023 #1

我认为圣地亚哥走在正确的道路上。您可能需要仅在它们都不是 false 时才运行。 或者,为了更容易,您可以这样做if ($Apath -notcontains $false)

$Apath1 = Test-Path 'yourpath.1'
$Apath2 = Test-Path 'yourpath.2'
$Apath3 = Test-Path 'yourpath.3'

if ($Apath1 -and $Apath2 -and $Apath3)

这是一段较多的代码,但它可能会稍微简化它,而不是尝试与数组进行比较

评论

0赞 Eric S 11/17/2023
@lit你是对的,谢谢,我编辑了它。在我回答这个问题的同时,我正在处理一个 python 脚本
1赞 js2010 11/18/2023 #2

这不是正确的方法,因为 -eq 的右侧会转换为字符串:

"False False False" -eq $false,$false,$false

True
"$($false,$false,$false)"

False False False

Compare-object 方法,因为当两个列表相等时没有输出。请注意,如果没有 -syncwindow 0,顺序无关紧要。

if (compare-object $false,$false,$false $false,$false,$true) { 'not equal' }

not equal