2017-01-25 2 views
1

Так что я не уверен, что это может быть достигнуто, все ответы, которые я видел сделку с зная точное имя файла ... но вот он идет:Поиск с помощью PowerShell

Я хочу искать через каталог, в котором есть + -2 000 песен, но я не хочу знать все имя файла (потому что некоторые из них могут стать длинными и сложными). Вот пример того, что я хочу: Я знаю, что могу отобразить все содержимое каталога делает это:

Get-ChildItem C:\My\Path\To\Songs\Here 

Но то, что я хочу сделать (так как этот каталог содержит около 2000 песен) является поиск так что мне нужно только ввести несколько слов из названия и вывести только те песни, которые содержат эти слова. Например:

Если полное имя файла "Все умрут Young", и я поиск по ключевому слову "Все" Я хочу следующее окно:

Все Everybody Loves Все I Can» т Получить с каждым и т.д. и т.д. и т.д.

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

+0

Попробуйте 'Get-ChildItem -Path C: \ My \ Путь \ К \ Songs \ Здесь -Recurse -Filter * Все *' – Nkosi

+0

@Nkosi Это работает! Хотел бы я дать вам ответ! –

+1

'Get-Help' - ваш друг в powershell. Используйте «Get-Help Get-ChildItem», чтобы получить дополнительную документацию по этому командлету. Используйте то же самое для любой команды, и вы будете поражены богатством информации. – Nkosi

ответ

2

Используйте параметр -Filter

Get-ChildItem -Path C:\My\Path\To\Songs\Here -Recurse -File -Filter *Everybody* 

Ссылка: Get-ChildItem

-Filter

Задает фильтр в формат или язык поставщика. Значение этот параметр определяет параметр Path. Синтаксис фильтра , включая использование подстановочных знаков, зависит от поставщика. Фильтры являются более эффективными, чем другие параметры, поскольку поставщик применяет их при извлечении объектов, вместо того, чтобы иметь Windows . PowerShell фильтрует объекты после их получения у поставщика .

Обновление:

Чтобы получить только пути к файлам вы можете продлить его как

Get-ChildItem -Recurse -File -Filter *Everybody* | % {$_.FullName} 

Или

Get-ChildItem -Recurse -File -Filter *Everybody* | Foreach-Object {$_.FullName} 

по конвейеру файлов для каждого цикла и экстрагирования полный путь.

1

если вы хотите фильтр более elabored вы можете это сделать:

Get-ChildItem -Recurse -File | where {$_.Name -like "*word1*" -and $_.Name -notlike "*word2*"} | select FullName 
Смежные вопросы