Estou procurando um arquivo em todas as pastas.
Copyforbuild.bat
está disponível em muitos lugares e eu gostaria de pesquisar recursivamente.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
Como posso fazer isso no PowerShell?
powershell
powershell-2.0
Samselvaprabu
fonte
fonte
cd V:\MyFolder
seguido porls -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
) ao final do nome do arquivo. ****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2:$Folder = "C:\Program Files"
LINE3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
Eu uso isso para encontrar arquivos e, em seguida, o PowerShell exibe o caminho inteiro dos resultados:
Você sempre pode usar o curinga
*
noFolderName
e / ouFileName.fileExtension
. Por exemplo:O exemplo acima irá procurar qualquer pasta no
C:\
início de carro com a palavraFolder
. Portanto, se você tiver uma pasta chamadaFolderFoo
e oFolderBar
PowerShell mostrará resultados de ambas as pastas.O mesmo vale para o nome e a extensão do arquivo. Se você deseja procurar um arquivo com uma certa extensão, mas não sabe o nome do arquivo, pode usar:
Ou vice-versa:
fonte
Ao pesquisar pastas nas quais você pode obter um erro com base na segurança (por exemplo
C:\Users
), use o seguinte comando:fonte
Também vai funcionar
fonte
Aqui está o método que eu finalmente criei depois de lutar:
Para tornar a saída mais limpa (somente caminho), use:
Para obter apenas o primeiro resultado, use:
Agora, o importante:
Para pesquisar apenas arquivos / diretórios, não use
-File
ou-Directory
(veja abaixo o porquê). Em vez disso, use isso para arquivos:e remova os
-eq $false
diretórios for. Você não deixar um curinga arrastando comobin/*
.Por que não usar os switches integrados? Eles são terríveis e removem recursos aleatoriamente. Por exemplo, para usar
-Include
com um arquivo, você deve finalizar o caminho com um curinga. No entanto, isso desativa a-Recurse
opção sem informar:Você pensaria que isso daria todos os
*.lib
s em todos os subdiretórios, mas somente o nível superior será pesquisadobin
.Para procurar diretórios, você pode usar
-Directory
, mas remover o curinga à direita. Por qualquer motivo, isso não será desativado-Recurse
. É por esses motivos que eu recomendo não usar os sinalizadores internos.Você pode reduzir esse comando consideravelmente:
torna-se
Get-ChildItem
é um alias paragci
-Path
é o padrão para a posição 0, então você pode apenas fazer o primeiro caminho do argumento-Recurse
é um alias para-s
-Include
não tem taquigrafiafonte
Tente o seguinte:
fonte
| Where-Object { !$_PSIsContainer }
para excluir pastasFiltrar usando curingas:
Filtrando usando uma expressão regular:
fonte
'\ACopyForBuild\.(bat|cmd)\Z'
?Para adicionar à resposta @ user3303020 e gerar os resultados da pesquisa em um arquivo, você pode executar
Pode ser mais fácil procurar o arquivo correto dessa maneira.
fonte