2017-08-07 105 views
-1

不存在有一些簡單的腳本:查找文件,並退出,如果文件在PowerShell中

$sql = Get-ChildItem -Path "C:\files\" -Filter *.sql 

在C:/文件/可以是:

1號文件。(我的問題)

  • 一個文件(TEST.SQL)

  • 多個文件。 (test1.sql,test2.sql等)

  • 對於3我使用if ($sql.Count -gt 1)和其工作的罰款。 2 - 不太相關。

    第一個是一個問題 - 我有任何方法(方法屬性)檢查並得到錯誤或「退出1」,如果文件根本不存在源? (沒有任何if/else「magic」) 現在,它將路徑字符串放入$ sql變量中,當文件夾中沒有任何* .sql文件時。

    +0

    '現在,它把路徑字符串到$ SQL變量,當有folder'沒有任何* .sql文件我不能複製這個,如果沒有找到文件,你應該有一個空數組,所以你應該可以使用'if($ sql.count -eq 0)' – arco444

    +0

    @Sinai R.退出:你試過了什麼?請發佈你寫的代碼。 – Manu

    +0

    嗨,我認爲BenH've回答如下。有空陣列。它是我的問題。 :)如果我想「獲取」某些東西,但沒有什麼,我想看到一個錯誤。也許還有另一種獲取文件的方法。沒有if/else。這是一個問題。 –

    回答

    1

    Get-ChildItem當沒有匹配過濾器的文件,但只是返回一個空數組時,不會發生錯誤。因此,您不能強制終止錯誤-ErrorAction Stop

    這意味着您可能需要使用條件。最簡單的是:

    if (!($sql)) {throw 1} 
    

    另一種方法是:

    $sql = Get-ChildItem -Path "C:\files\" -Filter *.sql 
    Switch ($sql.count) { 
        0 { throw 1} 
        1 { "One Item" } 
        {$_ -gt 1} { "Multiple Items" } 
        default { "Invalid input" } 
    } 
    
    +0

    好的。得到它了。謝謝,本!看起來「替代」更好。再次感謝你! :) –

    相關問題