Eu documentei muitos recursos e bugs FINDSTR confusos em Quais são os recursos e limitações não documentados do comando Windows FINDSTR?
Existem dois problemas no seu código que levam a falhas.
1) O regex FINDSTR é limitado a um máximo de 15 termos [de classe]
Sua pesquisa tem 16, por isso não pode funcionar. Mas seu primeiro termo é [2]
, o que poderia ser simplificado para 2
. Portanto, o seguinte deve funcionar:
findstr /rb /s "2[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\>" "%userprofile%\*.txt" >>output.txt
Mas isso não acontece, como evidenciado por
>echo 2123456789123456|findstr /rb "2[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\>"
>
não retorna nada.
Acredito que isso expõe um bug desconhecido ou "recurso" : - /
Eu não tive tempo para investigar completamente, mas o bug / recurso proposto é:
2) A âncora da palavra inicial \<
e a âncora da palavra final \>
contam para o limite de 15% do termo [class]
. A pesquisa pode falhar silenciosamente se a pesquisa incluir âncora e o termo cumulativo count é exatamente 16 (novo relatório de bug proposto - parcialmente testado apenas no Win 10)
A âncora da palavra \>
final deve corresponder ao ponto antes de um caractere sem palavra ou fim de linha ou fim de entrada. Mas no meu caso de teste acima, existem 15 termos de classe, mais uma extremidade de âncora de palavras, perfazendo um total de 16, que falha silenciosamente.
Se eu alterar o teste para:
>echo 2123456789123456|findstr /rb "21[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\>"
2123456789123456
>
Em seguida, a contagem total é 15 e ele encontra o número.
Da mesma forma, a âncora begin \<
word deve corresponder ao início da entrada, ao início da linha ou à posição imediatamente após um caractere "sem palavra".
Mas o teste abaixo tem uma contagem cumulativa de termos de 16, que também falha silenciosamente:
>echo 2123456789123456|findstr /r "\<2[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
>
Se eu eliminar um dos termos da classe, a contagem será 15 e será bem-sucedida:
>echo 2123456789123456|findstr /r "\<21[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
2123456789123456
>
Se eu incluir as duas âncoras com os 15 termos da classe, a contagem total será 17 e receberei o erro FINDSTR: Search string too long.
.
>echo 2123456789123456|findstr /r "\<2[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\>"
FINDSTR: Search string too long.
>
Se eu remover um termo de classe, a contagem total de termos será 16 e falhará silenciosamente:
>echo 2123456789123456|findstr /r "\<21[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\>"
>
Se eu remover outro termo de classe, a contagem total de termos será 15 e funcionará
>echo 2123456789123456|findstr /r "\<212[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\>"
2123456789123456
>