Powershell - 或者不工作 - 或者我使用它错了。

时间:2014-05-30 21:57:10

标签: powershell

我试图以两种方式使用它,无论如何都删除了文件。基本上,如果任何变量都是真的,我不希望它删除文件,但无论如何它都会。我知道$ 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."
}

3 个答案:

答案 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 }