Получить в каталоге только файл с заданным расширением
У меня есть строковая переменная, указывающая на каталог. В этом каталоге находится один файл с расширением .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" }