O Comando FIND
Para pesquisar por texto em vários arquivos a partir do prompt de comando do Windows ou em arquivos de batch, você pode usar o comando FIND, que está presente desde os dias do MS DOS e ainda está disponível no Windows 11. É semelhante ao comando Unix grep
, mas não suporta expressões regulares. Se você deseja pesquisar a palavra borogoves
no diretório atual, siga esta sintaxe:
find "borogoves" *
Note que as aspas duplas em torno do padrão são obrigatórias. Se você estiver usando o PowerShell, precisará incluir aspas simples também:
find '"borogoves"' *
Em vez do asterisco (*
), você pode especificar uma máscara de arquivo como *.htm?
. O comando find
exibe os nomes dos arquivos que verifica, mesmo que não encontre nenhum correspondência nesses arquivos:
A pesquisa é sensível a maiúsculas e minúsculas por padrão, então geralmente é necessário adicionar o switch /I
para tratar letras maiúsculas e minúsculas como equivalentes:
find /I "<a href=" *.htm
Se você não especificar o arquivo a ser pesquisado, find
aguardará a entrada de texto da stdin, para que você possa encaminhar a saída de outro comando. Por exemplo, você pode listar todos os comandos de cópia suportados no Windows:
help | find /i "copy"
Outro switch, /V
, permite encontrar todas as linhas que não contêm o padrão, semelhante ao comando grep -v
.
Em arquivos de batch, você pode usar o fato de que o comando find
define o código de saída (errorlevel) como 1 se o padrão não for encontrado. Por exemplo, você pode verificar se o computador está executando uma versão de 64 bits ou 32 bits do Windows:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
O Comando FINDSTR: Pesquisa de Expressão Regular
Se você precisa encontrar uma expressão regular, tente o comando FINDSTR
, que foi introduzido no Windows XP. Por razões históricas, findstr
suporta um subconjunto limitado de expressões regulares, então você só pode usar essas características de regex:
- O ponto
.
corresponde a qualquer caractere exceto quebra de linha e caracteres ASCII estendidos. - Listas de caracteres
[abc]
correspondem a qualquer um dos caracteres especificados (a
,b
, ouc
). - Intervalos de listas de caracteres
[a-z]
correspondem a qualquer letra dea
az
. - O asterisco (
*
) indica que o caractere anterior pode ser repetido zero ou mais vezes. - Os símbolos
\<
e\>
marcam o início e o fim de uma palavra. - O caret (
^
) e o cifrão ($
) denotam o início e o fim de uma linha. - A barra invertida (
\
) escapa qualquer caractere especial, permitindo que você encontre caracteres literais. Por exemplo,\$
encontra o cifrão em si.
Findstr não suporta classes de caracteres (\d
), alternância (|
), ou outras repetições (+
ou {5}
).
A sintaxe básica é a mesma do comando FIND
:
findstr "\<20[0-9][0-9]\>" *.htm
Este comando encontra todos os anos começando com 2000 nos arquivos .htm
do diretório atual. Assim como com find
, use a opção /I
para uma pesquisa case-insensitive:
Limitações e peculiaridades do FINDSTR
Listas de caracteres [a-z]
são sempre case-insensitive, então echo ABC | findstr "[a-z]"
corresponde.
O caractere de espaço funciona como o metacaractere de alternância no findstr
, então uma consulta de pesquisa como findstr "new shoes" *
encontrará todas as linhas contendo new
ou shoes
. Infelizmente, não há como escapar do espaço e usá-lo como um caractere literal em uma expressão regular. Por exemplo, você não pode encontrar linhas que comecem com um espaço.
Erros de sintaxe em expressão regular são ignorados. Por exemplo, findstr "[" *
corresponderá a todas as linhas que contenham o caractere [
.
Se o arquivo contiver quebras de linha Unix (LF), o metacaractere $
não funciona corretamente. Se a última linha de um arquivo não tiver um terminador de linha, o findstr
não conseguirá encontrá-la. Por exemplo, findstr "</html>$" *
não funcionará se não houver CR+LF após </html>.
Versões iniciais do Windows tinham limitações quanto ao comprimento da linha para find
e findstr
, bem como para outros comandos. As versões recentes removeram esses limites, então você não precisa se preocupar com eles mais. Consulte esta pergunta no StackOverflow para conhecer as limitações e bugs do findstr
, especialmente nas versões iniciais do Windows.
O comando findstr opera no código de página OEM (MS DOS); o caractere de ponto não corresponde a nenhum dos caracteres ASCII estendidos. Como resultado, o comando não é muito útil para texto não inglês. Além disso, você não pode pesquisar caracteres Unicode (UTF-8 ou UTF-16).
Conclusão
Você pode aprender sobre outras opções digitando findstr /?
ou find /?
. Por exemplo, as opções adicionais permitem que você pesquise em subdiretórios ou imprima números de linha. Você também pode consultar a documentação oficial.
Em geral, os comandos find
e findstr
são obsoletos e vêm com várias peculiaridades e limitações.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt