我尝试在具有相似数字的文件中查找确切数字。例如,我的文件包含:
bsmith,45,13,67,,,,,,11,13,
我想检查一下,例如数字 1。
这就是我所拥有的:
findstr /c:"%user%" "ACL.csv" >check
findstr /c:"\<%num%\>" "check
echo %errorlevel%
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)
我尝试了这个,但如果变量 num=1,那么结果仍然为真,因为文件包含 11
findstr /c:"%user%" "ACL.csv" >check
findstr /c:"%num%" "check
echo %errorlevel%
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)
任何帮助,将不胜感激。
答案1
如果变量 num=1,则结果仍然为真,因为文件包含 11
前导(空格)和尾随的 ,(逗号)很重要,因为这可以防止 1 匹配 11(例如)
在这种特殊情况下,您没有前导空格,因此您需要使用:
findstr /c:",%num%," check
笔记:
- 这将匹配
,1,
,但不会,11,
"
文件名前不需要加前导(引号)。
一个更简单的解决方案是使用管道(|
),正如我在之前的回答中所推荐的那样:
findstr /c:"%user%" "ACL.csv" | findstr /c:",%num%," >nul 2>&1
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)
那么您就不需要临时文件了check
。
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 重定向- 重定向运算符。
答案2
findstr 支持正则表达式的(一些变体),因此你实际上可以使用类似
findstr /R "\<1\>" file.csv
得到你所需要的。
解释:
/R
启用正则表达式模式\<
是一个单词的开头1
是你的例子,在这里使用你的变量\>
是一个单词的结尾
您可以通过运行findstr /?
或获取更多信息在线的。
答案3
我认为最好的办法是返回原始代码并使其匹配整个单词。这是迄今为止确保匹配正确名称和号码的最安全选择。我还会让名称检查不区分大小写。
findstr /I "\<%user%\>" "ACL.csv" | findstr "\<%num%\>" >nul 2>&1
IF NOT ERRORLEVEL 1 (
echo AUTHORIZED
) else (
echo UNAUTHORIZED
)