При написании некоторых недавних скриптов в cmd.exe мне нужно было использовать findstr с регулярными выражениями - требуемые пользователем стандартные команды cmd.exe(без GnuWin32, ни Cygwin, ни VBS, ни Powershell).
Я просто хотел знать, содержит ли переменная любые символы верхнего регистра и пыталась использовать:
> set myvar=abc
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %errorlevel%
0
Если для %myvar% установлено значение abc, это фактически выводит строку и устанавливает errorlevel в 0, указывая, что совпадение найдено.
Однако вариант с полным списком:
> echo %myvar%|findstr /r "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
> echo %errorlevel%
1
не выводит строку, и она правильно устанавливает errorlevel в 1.
Кроме того:
> echo %myvar%|findstr /r "^[A-Z]*$"
> echo %errorlevel%
1
также работает как ожидалось.
Я, очевидно, пропущу что-то здесь, даже если он только что нарушил findstr.
Почему первое (диапазон) регулярное выражение не работает в этом случае?
И еще более странно:
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z]"
abc
> echo %myvar%|findstr /r "[A-Z][A-Z][A-Z]"
> echo %myvar%|findstr /r "[A]"
Последние два выше также не выводят строку!!