Я ищу файл во всех папках.
Copyforbuild.bat
доступно во многих местах, и я хотел бы искать рекурсивно.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
Как я могу сделать это в PowerShell?
powershell
powershell-2.0
Samselvaprabu
источник
источник
cd V:\MyFolder
затемls -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
) в конец имени файла. ****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2:$Folder = "C:\Program Files"
LINE3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
Я использую это для поиска файлов, а затем PowerShell отображает полный путь к результатам:
Вы всегда можете использовать подстановочный знак
*
вFolderName
и / илиFileName.fileExtension
. Например:Приведенный выше пример будет искать любую папку на
C:\
диске, начиная со словаFolder
. Так что если у вас есть папка с именемFolderFoo
иFolderBar
PowerShell покажет результаты из обеих этих папок.То же самое касается имени файла и расширения файла. Если вы хотите найти файл с определенным расширением, но не знаете имя файла, вы можете использовать:
Или наоборот:
источник
При поиске в папках, в которых вы можете получить ошибку, основанную на безопасности (например
C:\Users
), используйте следующую команду:источник
Тоже будет работать
источник
Вот метод, который я наконец придумал после борьбы:
Чтобы сделать вывод чище (только путь), используйте:
Чтобы получить только первый результат, используйте:
Теперь о важных вещах:
Для поиска только файлов / каталогов не используйте
-File
или-Directory
(см. Ниже, почему). Вместо этого используйте это для файлов:и удалите
-eq $false
для каталогов. Вы не оставить косой символ типаbin/*
.Почему бы не использовать встроенные переключатели? Они ужасны и удаляют функции случайным образом. Например, чтобы использовать
-Include
файл, необходимо завершить путь подстановочным знаком. Тем не менее, это отключает-Recurse
переключатель, не сообщая вам:Вы можете подумать, что это даст вам все
*.lib
s во всех подкаталогах, но это будет только поиск на верхнем уровнеbin
.Для поиска каталогов вы можете использовать
-Directory
, но затем вы должны удалить завершающий шаблон. По какой-то причине это не деактивируется-Recurse
. Именно по этим причинам я рекомендую не использовать встроенные флаги.Вы можете значительно сократить эту команду:
становится
Get-ChildItem
связан сgci
-Path
по умолчанию в позиции 0, так что вы можете просто сделать первый путь аргумента-Recurse
связан с-s
-Include
не имеет стенографииисточник
Попробуй это:
источник
| Where-Object { !$_PSIsContainer }
чтобы исключить папкиФильтр с использованием подстановочных знаков:
Фильтрация с использованием регулярного выражения:
источник
'\ACopyForBuild\.(bat|cmd)\Z'
?Чтобы добавить к @ user3303020 ответ и вывести результаты поиска в файл, вы можете запустить
Таким образом, может быть проще найти правильный файл.
источник