使用 findstr 读取文件以确定确切结果

使用 findstr 读取文件以确定确切结果

我尝试在具有相似数字的文件中查找确切数字。例如,我的文件包含:

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


答案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
)

相关内容