我正在尝试创建一个批处理脚本,当用户输入一个单词时,脚本将搜索用户在特定文件中输入的字符串。
我能够找到它是否存在于文件中,但问题是我似乎无法使其仅针对用户输入的内容。
对于我的文件,我使用.dat扩展名,下面是我文件的示例内容。
user1
user2
user3
user4
user5
在我的情况下,当用户输入user1
时,脚本会告诉我它有效或在列表中,但当用户输入user
或1,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
答案 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
。