我有一个文本文件,我想运行一个批处理文件,它读取整个文本文件并告诉我字符串“PASS”的出现次数:
你能帮忙怎么做吗 - 我无法理解 BAT 文件中令牌的用法。
我有一个文本文件,我想运行一个批处理文件,它读取整个文本文件并告诉我字符串“PASS”的出现次数:
你能帮忙怎么做吗 - 我无法理解 BAT 文件中令牌的用法。
也许该findstr
命令会对您有所帮助:Findstr Help。它不会打印出现的次数,但也许你可以对结果做点什么。
更新:Find 命令有一个/c
选项,它计算包含该字符串的行数。
Mulmoth 的答案很好,通常它应该可以解决您的问题。
但是由于您不了解令牌,因此我将尝试对其进行解释。
FOR/F
您可以使用该命令读取文件的内容。
将FOR/F
逐行读取文件,每个空行都将被跳过,每一行都以 EOL 字符开头(默认为;
)。
它默认使用tokens=1 delims=<TAB><SPACE> EOL=;
.
在这种情况下,您总是得到一个令牌,直到行尾或第一个SPACE
或TAB
.
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 )
这是可行的,因为只有一个标记,因为没有任何字符可以将行拆分为更多标记。