2012-11-06 63 views
2

這是漫長的一天,我想我會生氣。我想測試一個文件並生成一個電子郵件,如果沒有。在這裏它被削減到最小:條件邏輯不再按預期工作?

> IF('False' -eq (Test-Path D:\Scripts\SFTP\Import\*)){ECHO "SEND EMAIL"} 
> SEND EMAIL 

__________________________________________________________________________ 
> IF((Test-Path D:\Scripts\SFTP\Import\*) -eq 'False'){ECHO "SEND EMAIL"} 
> 

爲什麼第二個命令不工作?

我試着在'IF'語句之外運行Test-Path到一個變量中,然後再對它進行測試,但它不起作用。

如果我只是運行「測試路徑」命令,我得到一個布爾值'假',如預期。我以前用這種方式使用了條件邏輯,並且它的工作。

我在做什麼錯?

回答

5

原因是這樣的。在第一個中,你有一個字符串作爲比較的第一個操作數。如果可能的話,這迫使PS強制第二個操作數爲一個字符串。在這種情況下,這意味着調用返回'False'字符串的布爾值的.ToString()方法(如果布爾值實際上是false)。然而,在第二種情況下,您將呈現一個布爾值作爲第一個操作數,所以該字符串被強制爲布爾值。顯然它不工作。爲避免這些問題,請使用內置變量$false(或$true)變量。我個人建議只是否定Test-Path。這裏有幾個方法,應該工作:

if(-NOT (Test-Path D:\Scripts\SFTP\Import\*)){ 


if((Test-Path D:\Scripts\SFTP\Import\*) -eq $false){ 
+0

+1有時所以,不要告訴我,答案已經給出.. –

+0

感謝您的幫助。似乎現在正在工作。我現在的問題是我如何設法使用我編寫的其他腳本進行幾乎相同的測試。 – Patrick

+0

我需要看看其他位說。 – EBGreen

1

對於

'False' -eq (Test-Path D:\Scripts\SFTP\Import\*) 

對比的第二個價值被評估爲[字符串]

這裏

(Test-Path D:\Scripts\SFTP\Import\*) -eq 'False' 
PowerShell中的脅迫規則

比較的第二個值不能被評估爲[Bool],那麼它會失敗。

對於bool開始比較是最優使用自動變量$false$true