Findstr ERRORLEVEL returns 如果我键入与搜索字符串长度相同的点,则级别错误

Findstr ERRORLEVEL returns wrong level if I type dot's of the same length as the search string

我创建批处理 (.bat) 脚本,其中我使用 findstrif / else 语句。

效果好的部分:

不好的部分:


我的searchable_file.xml:

dev
current
old
stable
oldest
newest
blue
green

我的 findstr 脚本:

SET /P SELECTION=

FINDSTR /R /C:"^%SELECTION%$" searchable_file.xml > NUL

IF NOT ERRORLEVEL 1 (
    ECHO [OK] The value entered is valid.
) ELSE (
    ECHO [ERROR] The path entered does not exist. Try again.
)

findstr 命令将 . 视为通配符,因此在字符串中搜索点将 return 任何字符数与点数相同的单词。例如,在 the 中搜索 t.e 将 return the。如果您搜索 .*,它会 return 几乎所有内容,因为 * 允许通配符匹配任意次数。您应该能够使用反斜杠转义通配符,例如 \.\.\. 只会搜索点而不是其他字符。 Reference

FINDSTR /R /C:"^%SELECTION%$" file.txt中的/R表示使用REGEX(点作为通配符)。只是删除 /R 是没有用的,因为它无论如何都是标准的。将其替换为 /L (Literal)。

当然这意味着,“行首”的 ^ 和“行尾”的 $ 将不再起作用(它们是正则表达式),但您可以添加 /BB行首)和/EE行首)改为:

FINDSTR /L /B /E /C:"%SELECTION%" file.txt

或使用/X开关(整行):

FINDSTR /L /X /C:"%SELECTION%" file.txt

未记录但受支持的 findstr 功能:您可以将开关与单个 /:

结合使用
FINDSTR /LXC:"%SELECTION%" file.txt

也许您还想使用 /i 开关(I忽略大写)来查找 blueBlueBLUE等:

FINDSTR /ILXC:"%SELECTION%" file.txt