Windows FINDSTR命令可怕地记录在案.有一个非常基本的命令行帮助可用FINDSTR /?,或者HELP FINDSTR,但是它非常不合适.在https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr上有更多的在线文档.
有许多FINDSTR功能和限制甚至在文档中都没有暗示.如果没有先前的知识和/或仔细的实验,他们也无法预料到.
所以问题是 - 未记录的FINDSTR功能和限制是什么?
此问题的目的是提供许多未记录的功能的一站式存储库,以便:
A)开发人员可以充分利用那里的功能.
B)开发人员不要浪费时间,想知道为什么某些东西看起来不应该起作用.
在回复之前,请确保您知道现有文档.如果HELP涵盖了这些信息,则它不属于此处.
这也不是展示FINDSTR有趣用途的地方.如果逻辑人员可以根据文档预测FINDSTR的特定用法的行为,那么它不属于此处.
同样,如果逻辑人员可以基于任何现有答案中包含的信息预测特定用法的行为,那么再次,它不属于此处.
在cmd.exe中编写一些最近的脚本时,我需要使用findstr正则表达式 - 客户需要标准cmd.exe命令(没有GnuWin32,Cygwin也不是VBS,也不是Powershell).
我只想知道变量是否包含任何大写字符并尝试使用:
> set myvar=abc
> echo %myvar%|findstr /r "[A-Z]"
abc
> echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)
当%myvar%设置为abc,实际输出字符串并设置errorlevel为0,表示找到了匹配项.
但是,完整列表变体:
> echo %myvar%|findstr /r "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
> echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
确实不输出的行,它正确地设置errorlevel为1.
此外:
> echo %myvar%|findstr /r "^[A-Z]*$"
> echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
也按预期工作.
我显然在这里遗漏了一些东西,即使它只是在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 …Run Code Online (Sandbox Code Playgroud)