错误IF语句

时间:2014-05-12 15:40:49

标签: powershell if-statement

我正在尝试添加上下文菜单(对于目录)选项" Open Sublime Project"和Sublime Text Editor 2的图标。

嗯,问题是如果我执行2个命令,执行是完美的,但是如果我执行脚本,只执行第一个命令。

输出: 没有错误

If ( -NOT( 
            ([bool](New-Item -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project\command" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`" --new-window %1" -Force)) -OR
            ([bool](New-ItemProperty -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project" -Name "Icon" -PropertyType "String" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`",0" -Force))
         )
    )
{
    Write-Host "Error"
}
Else
{
    Write-Host "No errors"
}

1 个答案:

答案 0 :(得分:5)

get-help about_Logical_Operators

  

Windows PowerShell逻辑运算符仅评估语句   需要确定声明的真值。如果是左边   包含和运算符的语句中的操作数是FALSE ,.   右操作数未被评估。 如果左边的操作数在一个语句中   包含or语句的是TRUE,右操作数不是   评估。因此,您可以以相同的方式使用这些语句   您将使用If语句。

您应该将执行与逻辑评估分开:

$val1 = New-Item -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project\command" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`" --new-window %1" -Force)
$val2 = New-ItemProperty -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project" -Name "Icon" -PropertyType "String" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`",0" -Force
If (-NOT($val1 -and $val2))
{
    Write-Host "Error"
}
Else
{
    Write-Host "No errors"
}

此外,我将-or更改为-and,因为使用或者,如果一个错误而另一个错误成功,则不会返回错误,这对我没有意义