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

问题描述 投票:0回答:1

我正在为批处理文件构建用户名和密码功能,我让系统从2个文本文件,Uname和Pass中读取,并找到用户名和密码,但系统正在提取Pass中列出的任何密码。如何读取用户名所在的行,将密码设置为仅接受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
batch-file text-files
1个回答
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选项访问%(%)Acontent_of_line%(%)Btokens=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选项。
  • 然后,继续如上所述(众所周知)。

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

  • tokens=1,2
  • for /?
  • find /?

尝试使用findstr /?find的一些例子来完全理解它们是如何工作的。

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

© www.soinside.com 2019 - 2024. All rights reserved.