При написании некоторых недавних скриптов в 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]"
Последние два выше также не выводят строку!!