Lote diretórios / arquivos para várias strings separadas com resultados para cada string

1

Eu gostaria de pesquisar recursivamente por meio de um diretório pai e todos os subdiretórios para várias sequências separadas e mostrar os resultados de cada sequência. Por exemplo:

Texto para pesquisar

Foo
Bar
Fizz
Buzz
(list continues for several hundred words)

Painel de resultados

Foo
  - Found in files x, y, z
Bar
  - Found in files x, y
Fizz
  - Not found in any files
Buzz
  - Found in files y, z

Resumo
Eu tenho uma lista de várias centenas de seqüências de caracteres que eu terei que procurar várias vezes. É um processo tedioso procurar sequências individuais e estou procurando uma maneira de realizar isso em um processo em lote.

Existe algum programa do Windows que possa realizar este tipo de pesquisa?

FWIW
Eu tentei com o notepad ++ e o Visual Studio, mas ainda não encontrei uma maneira de atender aos requisitos de mostrar cada string como um resultado separado.

    
por Metro Smurf 12.07.2012 / 17:55

3 respostas

2

O script em lote abaixo faria isso.

@echo off

for /F %%i in (pattern.txt) do (
echo Files containing %%i
findstr /M /C:%%i /S *.txt
)        

Para o caso de string não presente em nenhum dos arquivos, ele não imprime a declaração desejada. Em vez disso, imprime uma lista vazia de arquivos. fonte: Comando Findstr

    
por 14.07.2012 / 07:07
1

A Caneta de arquivo suíça tem um comando "hexifind" que pode pesquisar qualquer número de padrões em paralelo . Crie um arquivo de padrão de pesquisa "mypatterns.txt" contendo:

/Foo/
/Bar/
/Fizz/
/Buzz/

E para pesquisar todos os arquivos da pasta mydir, incluindo todas as subpastas, digite:

sfk hexfind -bylist mypatterns.txt mydir

Isso produzirá um dump de cada hit encontrado, como:

testfiles\Formats-dir-list.txt : hit at offset 0x273
>4261724D 75672E68 70700D0A 433A5C73< BarMug.hpp..C:\s 00000273
testfiles\Formats-dir-list.txt : hit at offset 0x290
>466F6F42 616E6B5C 42617244 72697665< FooBank\BarDrive 00000290

Para listar apenas os nomes de arquivo que contêm ocorrências, adicione a opção -nodump. Isso não produzirá o painel de resultados exato conforme solicitado, mas, pelo menos, você verá onde seus padrões ocorrem.

Se for um problema para criar mypatterns.txt com o formato //, você pode produzir o arquivo a partir de uma lista de palavras.txt como:

sfk filter wordlist.txt -form "/$col1/" +tofile mypatterns.txt
    
por 12.07.2012 / 22:50
1

Grep é seu amigo. Você pode colocar os padrões para procurar em um arquivo chamado patterns.txt e, em seguida, executar algo como o seguinte:

grep -f patterns.txt -r * > ..\results.txt

Editar:

Acabou de encontrar uma pergunta sobre coisas do tipo disponíveis para o grep no Windows. A pergunta e as respostas abrangem muitas ferramentas e comandos autónomos gratuitos e não gratuitos incorporados, por ex. Powershell.

    
por 12.07.2012 / 18:26