Why does findstr not handle case properly (in some circumstances)?
Posted
by paxdiablo
on Stack Overflow
See other posts from Stack Overflow
or by paxdiablo
Published on 2010-04-14T07:56:09Z
Indexed on
2010/04/14
8:13 UTC
Read the original article
Hit count: 379
While writing some recent scripts in cmd.exe, I had a need to use findstr
with regular expressions - customer required standard cmd.exe commands (no GnuWin32 nor Cygwin nor VBS nor Powershell).
I just wanted to know if a variable contained any upper-case characters and attempted to use:
> set myvar=abc
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %errorlevel%
0
When %myvar%
is set to abc
, that actually outputs the string and sets errorlevel
to 0, saying that a match was found.
However, the full-list variant:
> echo %myvar%|findstr /r "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
> echo %errorlevel%
1
does not output the line and it correctly sets errorlevel
to 1.
In addition:
> echo %myvar%|findstr /r "^[A-Z]*$"
> echo %errorlevel%
1
also works as expected.
I'm obviously missing something here even if it's only the fact that findstr
is somehow broken.
Why does the first (range) regex not work in this case?
And yet more weirdness:
> 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]"
The last two above also does not output the string!!
© Stack Overflow or respective owner