2017-08-07 138 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

    好的。得到它了。谢谢,本!看起来“替代”更好。再次感谢你! :) –