我试图以两种方式使用它,无论如何都删除了文件。基本上,如果任何变量都是真的,我不希望它删除文件,但无论如何它都会。我知道$ Paper = MN,它仍然会删除该文件。我显然做错了什么。
if(!$Paper.equals("MN") -or !$Paper.equals("NJ") -and $extension.equals(".txt")){
Remove-Item $File.FullName -Force -Recurse
write-host $File " has been removed."
}
if($Paper -ne "MN" -or $Paper -ne "NJ" -or $extension -eq ".txt"){
Remove-Item $File.FullName -Force -Recurse
write-host $File " has been removed."
}
答案 0 :(得分:1)
问题是,您需要将这两个示例的所有-or
更改为-and
。因为否则它总是会评估为真。
答案 1 :(得分:0)
让我们把你的第一个if放在真值表中:
!$ Paper.equals(" MN")我会称之为非A. !$ Paper.equals(" NJ")我会称之为NOT B $ extension.equals(" .txt")我将称之为C
你的表达不是A或B而C =删除
所以这是表格:
A B C delete
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1
现在看一下,您应该注意到,当至少一个表达式不为真且文件是txt时,您正在删除该文件。
你想要达到的目的是使用一些括号,
!($ Paper.equals(" MN") - 或$ Paper.equals(" NJ")) - 和$ extension.equals(" .txt&# 34)
新真值表:
NOT(A或B)和C =删除
A B C delete
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0
我们可以在这里应用De' Morgans法律并转向
NOT(A或B)到NOT A AND NOT B
所以它会变成
不是A而不是B和C
!$Paper.equals("MN") -and !$Paper.equals("NJ") -and $extension.equals(".txt")
答案 2 :(得分:0)
"基本上如果任何变量都是真的我不想让它删除文件,"
好。
if ( ( $Paper.equals("MN"), $Paper.equals("NJ"), $extension.equals(".txt") ) -notcontains $true )
{ Remove-Item $File.FullName -Force -Recurse }