【问题标题】:Find files and exit if file no exist in powershell如果powershell中不存在文件,则查找文件并退出
【发布时间】:2017-08-07 13:22:30
【问题描述】:

有一些简单的脚本:

$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 - 不太相关。

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

【问题讨论】:

  • Now it's putting path string into $sql variable, when there are no any *.sql file in folder我无法复制这个,如果没有找到文件,你应该有一个空数组,因此你应该可以使用if ($sql.count -eq 0)退出
  • @Sinai R.:你试过什么?请贴出你写的代码。
  • 嗨,我想 BenH 已经在下面回答了。有空数组。是我的问题。 :) 如果我想“获取”一些东西而什么都没有,我想会看到一个错误。也许还有另一种获取文件的方法。没有 if/else。这是一个问题。

标签: powershell file-extension get-childitem getfiles


【解决方案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" }
 }

【讨论】:

  • 好的。知道了。谢谢你,本!看起来“另类”更好。再次感谢你! :)
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2017-06-28
  • 2012-12-30
  • 2016-06-23
  • 2018-07-17
  • 2012-07-20
  • 1970-01-01
相关资源
最近更新 更多