【发布时间】:2020-01-30 22:37:56
【问题描述】:
对我来说,这似乎是一个非常简单的问题,但是我为此苦苦挣扎,还没有找到答案。 我的目标是计算文件中特定字符串的出现次数。 我使用以下命令执行或尝试执行此操作:
for /f "tokens=2 delims=;" %%a in ('path to file with searchstring') do (
set count=('path to file I am searching in' find /c "%%a")
if !count! NEQ 0 echo !count!
)
对我来说似乎很简单,但是脚本退出时第二行似乎是错误的。
我想将find的结果保存在一个变量中,因为我只想输出非零结果。
【问题讨论】:
-
1.将外部循环更改为
for /F "usebackq tokens=2 delims=;" %%a in ("path to file with searchstring") do ( ... )。 2. 第二行应为for /F %%c in ('^< "path to file I am searching in" find /C "%%a"') do set "count=%%c"。 3. 你应该像set "count=0"这样预初始化计数变量。 4. 在命令提示符窗口中输入for /?并(重新)阅读它的帮助... -
谢谢@aschipfl,这似乎有效。你能解释一下
^<是做什么的吗? -
但是,现在添加第二个
FOR似乎运行时大幅下降,但我会尝试一下,谢谢 -
关于
^<:您可以使用find /C "search string" "file path"来获取匹配行的数量,但出现的不仅仅是标题之类的数量;当您使用input redirection<将文件提供给find时,将返回纯计数;< "file path" find /C "seach string";由于该命令行的结果被for /F捕获,您需要escape (^) 重定向不会应用于for /F... -
注意:这会计算包含搜索字符串的行,而不是搜索字符串的出现次数。如果搜索字符串在一行中出现多次,则将它们计为一个(行)。可能对你来说很重要,也可能不重要,但你应该意识到这一点。
标签: for-loop batch-file variables