Рекурсивный поиск файлов с помощью PowerShell


Я ищу файл во всех папках.

Copyforbuild.bat доступно во многих местах, и я хотел бы искать рекурсивно.

$File = "V:Myfolder***.CopyForbuild.bat"

Как я могу это сделать в PowerShell?

6 178

6 ответов:

использовать Get-ChildItem С -Recurse переключатель:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force

при поиске папок, где вы можете получить ошибку на основе безопасности (например,C:\Users), используйте следующую команду:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force

Я использую это для поиска файлов, а затем PowerShell отображает весь путь к результатам:

dir -Path C:\FolderName -Filter FileName.fileExtension -Recurse | %{$_.FullName}

вы всегда можете использовать подстановочные * на FolderName и/или FileName.fileExtension. Например:

dir -Path C:\Folder* -Filter File*.file* -Recurse | %{$_.FullName}

приведенный выше пример будет искать любую папку в C:\ привод, начинающийся со слова Folder. Так что если у вас есть папка с именем FolderFoo и FolderBar PowerShell покажет результаты из обеих этих папок.

то же самое касается файла имя и расширение файла. Если вы хотите искать файл с определенным расширением, но не знаете имя файла, вы можете использовать:

dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName}

или наоборот:

dir -Path C:\FolderName -Filter FileName.* -Recurse | %{$_.FullName}
Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat

также будет работать

фильтр с использованием подстановочных знаков:

Get-ChildItem -Filter CopyForBuild* -Include *.bat,*.cmd -Exclude *.old.cmd,*.old.bat -Recurse

фильтрация с помощью регулярных выражений:

Get-ChildItem -Path "V:\Myfolder" -Recurse
| Where-Object { $_.Name -match '\ACopyForBuild\.[(bat)|(cmd)]\Z' }

попробуйте это:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse | Where-Object { $_.Attributes -ne "Directory"}