Найдите первый файл, соответствующий шаблону, используя PowerShell - PullRequest
46 голосов
/ 30 сентября 2009

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

gci *.xls

вернется

  • объект [], если существует более одного файла
  • FileInfo, если существует ровно один файл
  • ноль, если нет файлов

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

1 Ответ

92 голосов
/ 30 сентября 2009

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

@(gci *.xls)[0]

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...