如何验证用户输入的特定字符串是否在文本文件中

时间:2017-08-25 02:54:05

标签: windows batch-file cmd

我正在尝试创建一个批处理脚本,当用户输入一个单词时,脚本将搜索用户在特定文件中输入的字符串。

我能够找到它是否存在于文件中,但问题是我似乎无法使其仅针对用户输入的内容。

对于我的文件,我使用.dat扩展名,下面是我文件的示例内容。

user1
user2
user3
user4
user5

在我的情况下,当用户输入user1时,脚本会告诉我它有效或在列表中,但当用户输入user1,2,3,4,5时,它仍告诉我它是有效的。有没有办法让它只针对用户输入的内容?

现在我很难做到如何做到这一点。以下是我的示例代码。

@echo off

set /p word=


findstr /c:%word% test.dat > Nul
if ErrorLevel 1 (
echo.Not Valid

    ) else (
    echo.Valid
    )

pause

2 个答案:

答案 0 :(得分:2)

findstr /X /c:"%word%" test.dat > Nul

/x开关坚持完全匹配。

答案 1 :(得分:1)

您想要的是使用start and end of word markers

\<xyz   Word position: beginning of word
xyz\>   Word position: end of word

基本上这意味着\<从一个词的开头开始说;这个开头被定义为各种因素,如在行的开头,有空格或其他标点符号等,同样\>表示匹配结尾,例如下一个字符是文件结尾或结尾线,空格或标点符号等等。所以,如果你有一行如下:

user1 user2,user3user4

\<user1\>\<user2\>会匹配,因为它们周围有单词起点和终点,但\<user3\>失败,因为u之后有user3,这不是单词结尾字符,\<user4\>失败,因为3之前有user4,这不是单词字符的开头。

这对我有用:

findstr /r /c:"\<%word%\>" test.dat > Nul

请注意,启用正则表达式需要/r标志。另请注意,似乎没有关闭输出的标记,因此您不需要重定向到Nul