【问题标题】:Powershell -or isn't working -or I'm using it wrong.Powershell - 或者不工作 - 或者我用错了。
【发布时间】:2014-05-30 21:57:09
【问题描述】:

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    问题是您需要将两个示例的所有-or 更改为-and。因为否则它将始终评估为 true。

    【讨论】:

    • 是的。接得好。 !$Paper.equals("MN") - 或 !$Paper.equals("NJ") 总是计算为真。
    • 是的,我认为他的思路是 If(!($Paper.equals("MN") -or $Paper.equals("NJ")) -and $extension.equals(".txt")),但没有括号将他的 -or 组合在一起表示 -Not 声明。
    【解决方案2】:

    让我们把你的第一个 if 放在真值表中:

    !$Paper.equals("MN") 我会称之为 NOT A !$Paper.equals("NJ") 我称之为 NOT B $extension.equals(".txt") 我称它为 C

    你的表达不是 A OR NOT B AND C = delete

    所以这是表格:

    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") -or $Paper.equals("NJ")) -and $extension.equals(".txt")

    新的真值表:

    NOT(A OR B) AND 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
    

    我们可以在这里应用德摩根定律并转向

    NOT(A OR B) 变成 NOT A AND NOT B

    所以会变成

    非 A 非 B 和 C

    !$Paper.equals("MN") -and !$Paper.equals("NJ") -and $extension.equals(".txt")
    

    【讨论】:

    • 好吧,我明白你在说什么。if(!$Paper.equals("MN") -and !$Paper.equals("NJ") -or $extension.equals(". " txt")){ Remove-Item $File.FullName -Force -Recurse write-host $File " 已被删除。"在检查扩展名时,我仍然会使用 -or,因为无论前两个条件是否成立,我都希望它删除 .txt 文件。对?抱歉从我的手机发送。
    • 是的。那我误会你了。
    【解决方案3】:

    “基本上,如果任何变量为真,我不希望它删除文件,”

    好的。

    if ( ( $Paper.equals("MN"), $Paper.equals("NJ"), $extension.equals(".txt") ) -notcontains $true )
      { Remove-Item $File.FullName -Force -Recurse }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多