Во-первых, я не программист пакетных файлов и/или регулярных выражений. ;)
Использование пакетного программирования файлов для анализа имен файлов, начинающихся с «T», за которыми сразу может следовать «2» И за «2» может сразу следовать любое из целых чисел 0–9. Все файлы в папке будут называться одинаково, начиная с буквы «T», за которой следуют целые числа от 1 до 29. Например: T1_... или T12_... или T2_... или T22_....
В данном конкретном случае...
а) Имена файлов с T2 не должны соответствовать регулярному выражению. Уровень ошибки должен быть 1.
б) Имена файлов с T12 не должны соответствовать регулярному выражению. Уровень ошибки должен быть 1.
c) Имена файлов с T20 - T29 должны проходить регулярное выражение. Уровень ошибки должен быть равен 0.
Проблема: эти результаты не видны. Уровень ошибки всегда равен 0.
echo on
dir *.bin /b | findstr /r /c:"^[T][2][?=0123456789]*"
if errorlevel 0 goto :regular
:special
echo special
pause
exit /B 0
:regular
echo regular
pause
exit /B 0
Два веб-оценщика регулярных выражений говорят, что мое регулярное выражение действительно в том виде, в котором оно написано, при проверке на все комбинации, пройдено и не пройдено.
Что происходит с регулярным выражением «findstr», что оно не приводит к описанному поведению (a-c)? Или я неправильно использую уровень ошибок?
Спасибо за любое понимание.
x*
в регулярном выражении (гдеx
— любое регулярное выражение) можно было бы опустить, если речь идет о сопоставлении.foox*
иfoo
оба соответствуютfoo
и не ошибаются при совпадении, если заfoo
следует что-то отличное отx
. (Если вы захватите совпадающую строку для дальнейшей обработки, могут возникнуть ситуации, когда вы захотите включить в сопоставление как можно больше; но здесь вы ничего подобного не делаете.) - person tripleee   schedule 05.12.2017[?=0123]
соответствует любому символу, который является?
или=
или0
или1
или2
или3
. Нет необходимости помещать T или 2 в класс символов. - person tripleee   schedule 05.12.2017