2014-05-12 240 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