【发布时间】:2012-05-22 00:35:18
【问题描述】:
我有一个文本文件,我想运行一个批处理文件,它读取整个文本文件并告诉我字符串“PASS”的出现次数:
请您帮忙解决一下 - 我无法理解 BAT 文件中令牌的用法。
【问题讨论】:
标签: string for-loop batch-file
我有一个文本文件,我想运行一个批处理文件,它读取整个文本文件并告诉我字符串“PASS”的出现次数:
请您帮忙解决一下 - 我无法理解 BAT 文件中令牌的用法。
【问题讨论】:
标签: string for-loop batch-file
也许findstr 命令会帮助你:Findstr Help。
它不会打印出现的次数,但也许您可以对结果做点什么。
更新:
Find command 有一个 /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) 做 ( 回显完整行=%%a )
这行得通,因为只有一个标记,因为没有任何字符可以将行拆分为更多标记。
【讨论】: