在批处理文件中,如何在文本文件中查找字符串的出现次数?

时间:2012-05-14 13:59:04

标签: string for-loop batch-file

我有一个文本文件,我想运行一个批处理文件,它读取整个文本文件并告诉我no:出现字符串“PASS”:

你能帮忙解决一下这个问题 - 我无法理解BAT文件中令牌的用法。

2 个答案:

答案 0 :(得分:4)

也许findstr命令可以帮助您:Findstr Help。 它不会打印出现的次数,但也许你可以对结果做些什么。

更新: Find command有一个/c选项,用于计算包含该字符串的行数。

答案 1 :(得分:3)

Mulmoth的答案很好,通常它可以解决你的问题。

但是由于您不理解令牌,我会尝试解释它。

您可以使用FOR/F命令读取文件的内容 FOR/F将逐行读取文件,每个空行都将被跳过,每行也以EOL字符开头(默认为;)。

它默认使用tokens=1 delims=<TAB><SPACE> EOL=; 在这种情况下,您总是有一个令牌直到行结束或直到第一个SPACETAB

for /F "tokens=1" %%a in (myFile.txt) do (
  echo token1=%%a
)

如果你想阅读更多的令牌,那么你需要定义它。

for /F "tokens=1,2,3,4" %%a in (myFile.txt) do (
  echo token1=%%a token2=%%b token3=%%c token4=%%d
)

现在,如果一行中的delim更少,那么该行将在分隔符(SPACE或TAB)中分割成四个标记,然后标记为空。

如果您不想要多个令牌,或者在特定令牌之后,您可以使用*for /F "tokens=1*" %%a in (myFile.txt) do ( echo token1=%%a token2=%%b token3=%%c token4=%%d ) 。     for / F“tokens = 1,2,3,4 *”%% a in(myFile.txt)do(       echo token1 = %% a token2 = %% b token3 = %% c token4 = %% d     )

现在,在token4中将是第四个标记和行的其余部分。

%%a

在这种情况下,只存在一个令牌(%%b)其他令牌(%%c %%d token2=%b token3=%c token4=%d)不是有效令牌,文本{{1}}将得到回应。

您还可以使用delim将all减少到只有一个令牌。     for / F“delims =”%% a in(myFile.txt)do(       echo complete line = %% a     )

这是有效的,因为只有一个令牌,因为没有任何字符可以将该行划分为更多的令牌。