2014-05-12 315 views
2

我试图添加到上下文菜单(用于目录)选项“打开崇高工程”和崇高的文本编辑器2.错误IF语句

嘛图标,问题是,如果我执行命令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" 
} 

回答

5

get-help about_Logical_Operators

在Windows PowerShell逻辑运算符仅评估,以确定语句的真值所需要的报表 。如果包含and运算符的语句中的左边的 操作数为FALSE,则不会计算右操作数 。 如果包含该语句的语句 中的左操作数为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,因为或者,如果一个人的错误,另一种是成功的,它不会返回任何错误,对我没有意义

+0

我知道使用if语句...另外,这两个命令返回true。 – user3602030

+0

不,一个命令返回true,第二个命令从不计算,因为第一个命令返回true。如果左侧已经为true,没有理由评估'-or'的两侧,这就是为什么右侧永远不会运行。所以,只需将'-or'改为'-and'就可以让你的代码工作,虽然有很多更好的方法来检查PowerShell中的错误。但就像我的帖子所读,如果左侧是假的,右侧将永远不会运行在这种情况下 – Cole9350

+0

嗯......但第一个命令(布尔)是错误的,因为否定:/ – user3602030