Получить в каталоге только файл с заданным расширением

У меня есть строковая переменная, указывающая на каталог. В этом каталоге находится один файл с расширением .xyz, Как получить путь к этому файлу, не зная самого имени файла?

У меня есть следующий код:

$dir = "C:\Temp\MyDir"
$xyzFiles = @(Get-ChildItem "$dir\*.xyz")
$file = $xyzFiles[0]

Это "путь" в PowerShell? Есть ли лучшее решение?

5 ответов

Решение

Я бы порекомендовал использовать Get-ChildItem"s -include параметр.

Get-ChildItem $dir -include *.xyz

Я хотел бы использовать Get-ChildItem -Filter а также Select-Object -First:

$filepath = Get-ChildItem -Path $dir -Filter *.xyz |Select -First 1

Самое простое решение:

$xyzFiles = Get-ChildItem $dir -File '*.xyz'

В PowerShell версии 5 вы также можете попробовать это:Get-ChildItem $dir -Recurse -Include *.xyz

Вы можете использовать функцию конвейера в Powershell, чтобы быть немного более эффективной. Например Get-ChildItem "$dir" | Where-Object {$_.FullName -match ".xyz$"}

Это позволит получить файл с расширением.xyz. Если у вас есть больше, чем файл, вы можете сузить его.

Вы также можете попробовать Get-Item -LiteralPath (Resolve-Path "$dir\*.xyz")

Это должно работать:

Get-ChildItem $dir -File | Where-Object { $_.Extension -eq ".xyz" }
Другие вопросы по тегам