如何在文本文件中查找行并导出行号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在文本文件中查找行并导出行号相关的知识,希望对你有一定的参考价值。
我正在为批处理文件构建用户名和密码功能,我让系统从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
答案
这是一个更简单的解决方案:
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
选项。 - 然后,继续如上所述(众所周知)。
为了更好地理解这些命令的工作原理,我建议您打开一个新的cmd窗口并键入:
tokens=1,2
for /?
find /?
尝试使用findstr /?
和find
的一些例子来完全理解它们是如何工作的。
一些有趣的参考资料进一步阅读
以上是关于如何在文本文件中查找行并导出行号的主要内容,如果未能解决你的问题,请参考以下文章
Selenium web 自动化使用 python:如何使用 selenium 处理表以通过匹配文本来查找特定行并删除该行