1

Я пытаюсь найти точное число в файле с похожими номерами. Например, мой файл содержит:

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

Я хотел бы проверить, например, на номер 1.

Вот что у меня есть:

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

Я пробовал это, но если переменная num = 1, то результат все равно true, так как файл содержит 11

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

Любая помощь будет оценена.

3 ответа3

1

если переменная num = 1, то результат все равно true, поскольку файл содержит 11

Я объяснил, как это сделать, в своем ответе на предыдущий вопрос:

ведущий (пробел) и трейлинг (запятая) важны, так как это предотвращает 1 совпадение 11 (например)

В этом конкретном случае у вас нет начального пробела, поэтому вам нужно использовать:

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

Замечания:

  • Это будет соответствовать ,1, а не ,11,
  • Вам не нужен ведущий " (цитата) перед именем файла.

Гораздо более простым решением является использование канала (|), как я также рекомендовал в моем предыдущем ответе:

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

Тогда вам не нужна временная check файлов.


0

Я думаю, что вам лучше всего вернуться к исходному коду и сопоставить его с целыми словами. На данный момент это будет самый безопасный вариант, чтобы убедиться, что вы соответствуете правильному имени и номеру. Я также сделал бы проверку для имени без учета регистра.

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

findstr поддерживает (некоторый вариант) регулярных выражений, так что вы можете использовать что-то вроде

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

чтобы получить то, что вам нужно.

Объяснение:

  • /R включает режим регулярных выражений
  • \< начало слова
  • 1 ваш пример, используйте вашу переменную здесь
  • \> это конец слова

Вы можете получить больше информации, запустив findstr /? или онлайн.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .