Подтвердить что ты не робот

Найти первый файл, соответствующий шаблону с помощью PowerShell

Я хотел бы выбрать любой файл ".xls" в каталоге. Проблема заключается в том, что команда dir может возвращать разные типы.

gci *.xls

вернет

  • object [], если имеется более одного файла
  • FileInfo, если есть ровно один файл
  • null, если нет файлов

Я могу иметь дело с null, но как я могу просто выбрать "первый" файл?

4b9b3361

Ответ 1

Вы можете заставить PowerShell возвращать массив, даже если присутствует только один элемент, заключая оператор в @(...):

@(gci *.xls)[0]

будет работать для каждого из трех ваших случаев:

  • возвращает первый объект коллекции файлов
  • он возвращает единственный объект, если есть только один
  • он возвращает $null, чтобы не начиналось с объекта

Существует также параметр -First для Select-Object:

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

который работает в значительной степени идентично вышеизложенному, за исключением того, что список файлов не нужно полностью перечислять с помощью Get-ChildItem, поскольку конвейер прерывается после первого элемента. Это может иметь значение, когда есть много файлов, соответствующих фильтру.