Leia o arquivo com o findstr para determinar os resultados exatos

1

Estou tentando encontrar um número exato em um arquivo com números semelhantes. Por exemplo, meu arquivo contém:

bsmith,45,13,67,,,,,,11,13,

Gostaria de verificar, por exemplo, o número 1.

Isso é o que eu tenho:

findstr /c:"%user%" "ACL.csv" >check
findstr /c:"\<%num%\>" "check
echo %errorlevel%
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)

Eu tentei isso, mas se a variável num = 1, o resultado ainda é verdadeiro, pois o arquivo contém 11

findstr /c:"%user%" "ACL.csv" >check
findstr /c:"%num%" "check
echo %errorlevel%
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)

Qualquer ajuda seria apreciada.

    
por JimBean2208 13.12.2017 / 15:52

3 respostas

1

se a variável num = 1, o resultado ainda é verdadeiro, pois o arquivo contém 11

Eu expliquei como fazer isso em minha resposta para sua pergunta anterior :

the leading (space) and trailing , (comma) are important as this prevents 1 matching 11 (for example)

Neste caso em particular, você não tem espaço de liderança, então você precisa usar:

findstr /c:",%num%," check

Nota:

  • Isso corresponderá a ,1, e não ,11,
  • Você não precisa de um " (citação) antes do nome do arquivo.

Uma solução muito mais simples é usar um canal ( | ), como também recomendei na minha resposta anterior:

findstr /c:"%user%" "ACL.csv" | findstr /c:",%num%," >nul 2>&1
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)

Então você não precisa do arquivo temporário check .

por 13.12.2017 / 16:42
0

O findstr suporta (alguma variante) de expressões regulares, então você pode realmente usar alguma coisa como

findstr /R "\<1\>" file.csv

para conseguir o que você precisa.

Explicação:

  • /R ativa o modo de regex
  • \< é o começo de uma palavra
  • 1 é o seu exemplo, use sua variável aqui
  • \> é o final de uma palavra

Você pode obter mais informações executando findstr /? ou on-line .

    
por 13.12.2017 / 16:10
0

Acho que sua melhor aposta é voltar ao seu código original e fazer com que ele corresponda a palavras inteiras. Essa seria, de longe, a opção mais segura para garantir que você correspondesse ao nome e número corretos. Eu também faria a verificação do nome do caso insensível.

findstr /I "\<%user%\>" "ACL.csv" | findstr "\<%num%\>" >nul 2>&1
IF NOT ERRORLEVEL 1 (
    echo AUTHORIZED
) else (
    echo UNAUTHORIZED
)
    
por 15.12.2017 / 20:27