查找文件并在 powershell 中不存在文件时退出

Find files and exit if file no exist in powershell

有一些简单的脚本:

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

在 C:/files/ 中可以是:

1.没有文件。(我的问题)

  1. 一个文件(test.sql)

  2. 多个文件。 (test1.sql , test2.sql 等)

对于 3,我正在使用 if ($sql.Count -gt 1 ) 并且它工作正常。 2 - 不是那么相关。

第一个是个问题 - 我有什么办法(方法 属性)检查并获取错误或 "Exit 1" 如果文件在源中根本不存在? (没有任何 if/else "magic") 现在,当文件夹中没有任何 *.sql 文件时,它将路径字符串放入 $sql 变量中。

Get-ChildItem 在没有文件匹配过滤器时不会出错,只是 returns 一个空数组。因此,您不能使用 -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" }
 }