Use o findstr de lote para arquivos com espaços em branco

2

Estou tentando pesquisar uma string em um determinado arquivo. Este arquivo pode ter espaços em branco em seu nome e estou tendo problemas com o arquivo em lote.

Eu posso fazer isso facilmente pelo console, obtendo os resultados corretos:

findstr /m /C:tofind "C:/myPath/my file name with white spaces"

Mas quando tento fazer isso no arquivo em lote, ele não mostra nenhum resultado:

@echo off
for /r  "delims:|" %%i in (*) do  (
    findstr /m /C:tofind "%%i"
)

O que estou fazendo de errado?

    
por Alvaro 15.01.2014 / 14:30

2 respostas

3

Tudo o que você precisa é o seguinte:

findstr /m /c:toFind *

Ele pesquisará todos os arquivos em seu diretório atual e imprimirá os nomes dos arquivos que contêm sua string de pesquisa.

Se você quiser procurar uma pasta diferente do diretório atual, então:

pushd "c:\yourPath"
findstr /m /c:toFind *
popd

Se você quiser incluir o caminho completo de cada arquivo na saída, então:

findstr /m /c:toFind "c:\yourPath\*"

A maneira correta de usar um loop FOR para iterar arquivos como você pretendia originalmente é:

for %%F in (*) do findstr /m /c:toFind "%%F"

Mas não é necessário usar o FOR para iterar os arquivos quando o FINDSTR puder iterar os arquivos por conta própria.

O comando FOR é o comando mais complicado disponível para lote. Existem muitas formas diferentes que fazem coisas completamente diferentes. Aqui estão apenas alguns:

for %%A in (file list with wildcard support)     -  iterate files
for /f "options" %%A in (filePath)               -  read and parse a file
for /f "options" %%A in ("string")               -  parse a string
for /f "options" %%A in ('someCommand')          -  parse the output of a command

Você deve ler a documentação com muito cuidado. Digite HELP FOR ou FOR /? no prompt de comando para obter a documentação.

    
por 15.01.2014 / 16:10
1

Eu encontrei a solução.

Parece funcionar com aspas duplas na cláusula in e com um /F em vez de /R/ for the para ':

@echo off
for /f  %%i in ("*") do  (
    findstr /m /C:toFind "%%i"
)
    
por 15.01.2014 / 15:47