如何在文本文件中查找行并导出行号

时间:2018-12-20 17:00:32

标签: batch-file text-files

我正在为批处理文件构建用户名和密码功能,并且我可以从两个文本文件(Uname和通行证)中读取并找到用户名和密码,但是系统会提取通行证中列出的所有密码。如何读取用户名所在的行,将密码设置为仅接受Pass文本文件中的相应行?

FOR /F "tokens=* delims=" %%x in (Users.txt) DO IF '%uname%'=='%%x' goto AdmCont
rem FOR /F "tokens=* delims=" %%x in (Pass.txt) DO IF '%code%'=='%%x' goto AdmCont

1 个答案:

答案 0 :(得分:0)

这是一个更简单的解决方案:

for /f "delims=: tokens=1,2" %A IN ('findstr /n "%uname%" Users.txt') do ( @set "number_of_line=%A" && @set "_uname=%B" )

或者,使用find代替findstr(非常复杂):

for /f "eol=- delims=[] tokens=1-2" %A IN ('find /n "%uname%" Users.txt') do ( @set "number_of_line=%A" && @set "_uname=%B" )

正如您在帖子中所请求的那样,请批处理文件代码(您使用双百分号(%%)),您可以将变量的百分号加倍

让我解释一下我的代码:

在两个循环中,我们解析命令的输出。您应该知道命令输出格式以及为什么使用findstr更简单。

findstr

  • 我们在/n中使用findstr选项,它告诉echo找到指定字符串的行。
  • /n选项之后,我们在文件后指定的位置指定要搜索的字符串。
  • 然后,我们指定要搜索指定字符串的文件。

输出将是:

%line_number%:%content_of_line%

因此,我们将其解析为:

  • 不要使用:选项将delims=:符号解析为令牌!
  • 使用line_number选项通过%(%)A访问content_of_line和通过%(%)B访问tokens=1,2
  • 众所周知:指定变量字母添加IN,然后解析命令并将其设置为变量行号及其内容。

find

  • 我们在/n中使用find选项,它告诉echo找到指定字符串的行。
  • /n选项之后,我们在文件后指定的位置指定要搜索的字符串。
  • 然后,我们指定要搜索指定字符串的文件。

语法非常相似,但是输出完全不同!:

---------- %FILENAME_SPECIFIED_WITH_CAPITAL_LETTERS%
[%line_number%]%line_content%

所以,这里:

  • 我们忽略了以-eol=-选项开头的行。
  • 我们不使用[]delims=[]符号解析为令牌。
  • 我们要使用line_number访问%(%)A,并使用line_content访问%(%)B,因此,我们添加了tokens=1,2选项。
  • 然后,继续上述操作(众所周知)。

为了更好地理解这些命令的工作方式,建议您打开一个新的cmd窗口并键入:

  • for /?
  • find /?
  • findstr /?

使用findfinstr尝试一些示例,以完全了解它们的工作原理。

一些有趣的参考资料供进一步阅读: