2

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

你能帮忙怎么做吗 - 我无法理解 BAT 文件中令牌的用法。

4

2 回答 2

4

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

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

于 2012-05-14T14:03:12.877 回答
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
)

现在,如果一行中的分隔符较少,则该行将在分隔符(SPACE 或 TAB)处分成四个标记,然后标记为空。

如果您不想要多个标记,或者在特定标记之后的行的其余部分,您可以使用*.
for /F "tokens=1,2,3,4*" %%a in (myFile.txt) do ( echo token1=%%a token2=%%b token3=%%c token4=%%d )

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

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

在这种情况下,仅存在一个标记 ( %%a) 其他标记 ( %%b %%c %%d) 不是有效标记,文本token2=%b token3=%c token4=%d将被回显。

您还可以使用 delim 将所有标记减少到只有一个标记。for /F "delims=" %%a in (myFile.txt) do ( echo complete line=%%a )

这是可行的,因为只有一个标记,因为没有任何字符可以将行拆分为更多标记。

于 2012-05-14T14:26:58.700 回答