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

Geo*_*uer 49 powershell

我想在目录中选择任何一个".xls"文件.问题是dir命令可以返回不同的类型.

gci *.xls
Run Code Online (Sandbox Code Playgroud)

将返回

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

我可以处理null,但我如何选择"第一个"文件?

Joe*_*oey 96

您可以强制PowerShell返回一个数组,即使只有一个项目存在,方法是将一个语句包装到@(...):

@(gci *.xls)[0]
Run Code Online (Sandbox Code Playgroud)

将适用于您的三种情况:

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

还有一个-First参数Select-Object:

Get-ChildItem -Filter *.xls | Select-Object -First 1
gci -fi *.xls | select -f 1
Run Code Online (Sandbox Code Playgroud)

与上面的工作方式完全相同,除了文件列表不需要完全枚举Get-ChildItem,因为管道在第一个项目之后被中止.当有许多文件与过滤器匹配时,这会有所不同.