使用PowerShell查找与模式匹配的第一个文件

我想select一个目录中的任何一个“.xls”文件。 问题是dir命令可以返回不同的types。

gci *.xls 

将返回

  • 对象[]如果有多个文件
  • FileInfo如果只有一个文件
  • 如果没有文件,则返回null

我可以处理null,但我怎样才能select“第一个”文件?

您可以强制PowerShell返回一个数组,即使只有一个项目通过将语句包装到@(...)

 @(gci *.xls)[0] 

将为您的三个案件的每一个工作:

  • 它返回文件集合的第一个对象
  • 它返回唯一的对象,如果只有一个
  • 它返回$null没有任何对象开始

还有Select-Object第一个参数:

 Get-ChildItem -Filter *.xls | Select-Object -First 1 gci -fi *.xls | select -f 1 

它与上面的工作非常相似,不同的是文件列表不需要完全由Get-ChildItem枚举,因为pipe道在第一项之后被中止。 当有许多文件与filter匹配时,这可能会有所不同。