Pesquisar no Prompt de Comando do Windows

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" *

Observe que as aspas duplas ao redor 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 match dentro desses arquivos:

A pesquisa é sensível a maiúsculas e minúsculas por padrão, então geralmente você precisa 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, permitindo que você canalize 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 a máquina 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, 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 ou c).
  • Intervalos de listas de caracteres [a-z] correspondem a qualquer letra de a a z.
  • 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 acento circunflexo (^) 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 o switch /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 o 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 contêm o caractere [.

Se o arquivo contém quebras de linha Unix (LF), o metacaractere $ não funciona corretamente. Se a última linha de um arquivo carece de um terminador de linha, o findstr não será capaz de encontrá-la. Por exemplo, findstr "</html>$" * não funcionará se não houver CR+LF após </html>.

As primeiras versões do Windows tinham limitações no comprimento da linha para os comandos find e findstr, bem como para outros comandos. As versões mais recentes levantaram esses limites, então você não precisa mais se preocupar com eles. Veja esta pergunta do StackOverflow para as limitações e bugs do findstr, especialmente nas primeiras versões do Windows.

O comando findstr opera na página de código OEM (MS DOS); o metacaractere 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 por caracteres Unicode (UTF-8 ou UTF-16).

Conclusão

Você pode aprender sobre outros parâmetros digitando findstr /? ou find /?. Por exemplo, os parâmetros adicionais permitem pesquisar em subdiretórios ou imprimir números de linha. Você também pode consultar a documentação oficial.

Em geral, os comandos find e findstr estão desatualizados e têm várias peculiaridades e limitações.

Source:
https://dzone.com/articles/search-from-the-windows-command-prompt