Сценарий Powershell для поиска определенного файла / имени файла?

я хотел написать небольшой скрипт, который искал точное имя файла, а не строку в имени файла.

Например, если я ищу «хосты» с помощью проводника, по умолчанию я получаю несколько результатов. В сценарии мне нужно ТОЛЬКО указанное мной имя. Я предполагаю, что это возможно?

На самом деле я только начал сценарий, и он предназначен только для моего личного использования, так что это не важно, это меня просто беспокоит. У меня есть несколько дисков, поэтому я начал с двух входов, один для запроса буквы диска, а другой для указания имени файла. Я могу искать по расширению, размеру файла и т. Д., Но не могу привязать поиск к точному имени.

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Спасибо за все ответы. Просто обновить. Я добавил один из ответов в свой крошечный скрипт, и он хорошо работает. Все три ответа сработали, но в конечном итоге я смог использовать только один, не обижаясь на два других. Ваше здоровье. Чтобы уточнить, «npp» - это псевдоним для Notepad ++, чтобы открыть найденный файл.

$drv = read-host "Choose drive"
$fname = read-host "File name"
$req = dir -Path $drv -r | Where-Object { !$PsIsContainer -and  [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -eq $fname }
set-location $req.directory
npp $req
36
задан JamesThomasMoon1979 8 December 2018 в 12:54
поделиться

3 ответа

В приглашении powershell используйте команду gci (псевдоним для Get-ChildItem) и -filter option:

gci -recurse -filter "hosts"

Это вернет точное соответствие имени файла "hosts".


SteveMustafa указывает, что в текущих версиях powershell вы можете использовать переключатель -File для рекурсивного поиска только файлов с именем "hosts" (а не каталогов или других различных сущностей файловой системы):

gci -recurse -filter "hosts" -File 


Команда может вывести множество красных сообщений об ошибках типа "Доступ к пути 'C:\Windows\Prefetch' запрещен. ".

Если вы хотите избежать сообщений об ошибках, установите -ErrorAction в значение silent.

gci -recurse -filter "hosts" -File -ErrorAction SilentlyContinue


Дополнительным помощником является то, что вы можете задать корень для поиска с помощью -Path. Результирующая команда для явного поиска, например, от корня диска C будет

gci -Recurse -Filter "hosts" -File -ErrorAction SilentlyContinue -Path "C:\"
64
ответ дан 27 November 2019 в 05:28
поделиться

Предположим, что у вас подключен диск Z::

Get-ChildItem -Path "Z:" -Recurse | Where-Object { !$PsIsContainer -and [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -eq "hosts" }
12
ответ дан 27 November 2019 в 05:28
поделиться

Я использую эту форму для таких вещей:

gci . hosts -r | ? {!$_.PSIsContainer}

. сопоставляется с позиционным параметром Путь , а «хосты» сопоставляются с позиционным параметром Фильтр . Я настоятельно рекомендую использовать Фильтр вместо Включить , если провайдер поддерживает фильтрацию (а провайдер файловой системы поддерживает).Это немного быстрее, чем Include .

8
ответ дан 27 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: