使用find只返回数字

我有一个外部过程,基本上需要调用:

int myInt = exec('find /v /c "" filepath'); 

它正在计算文本文件中的行数。 如果有一个更好的方法来获得也很好的整数量。

使用查找,完整的命令会返回除了计数以外的一些信息,例如,它会为每个事件(文件名)返回一些破折号,然后:10。

所以:

 ---------- filepath :10 

有什么办法可以find只返回整数部分? 或者,我需要将输出传送到另一个进程(类似于UNIX上的grep)?

find时使用文件输出---------- file.txt :10 。 如果它处理STDIN,它只给你数字:

 find /v /c "" <file.txt 

要将此输出转换为变量,请将此for Statement:

 for /f %%i in ('find /v /c "" ^<file.txt') do set myint=%%i echo %myint% 

(用于命令行,使用单个%i而不是%%i

我相信你需要将find的结果输入到诸如findstr 2之类的其他实用程序中

原因是:/ C选项Displays only the count of lines containing the string.

根据您提供的搜索文件filepath ,可能会有多个条目返回。 为了确保结果是有意义的, find必须为你提供文件filepath ,以便为你提供适当的上下文。

所以你会想要发布一个像这样的东西:

 int myInt = exec('find /v /c "" 'filepath' | findstr /r ': [0-9]*'); 

1 请注意:我没有验证在findstr中的正则findstr将工作。
2 显然findstr 返回整个行,所以你需要找到一个不同的命令。

你可以用这个语法来做到这一点:

 type filepath | find /c /v "" 

原始来源在这里 。

 type filepath 

返回文件的行,而

 find /c /v "" 

返回它们的数量(显然“搜索项是查找的一个bug特性,允许你计算行数)。

你可以尝试用下面的命令行替换find /v /c "" filepath部分:

 cmd /V:ON /C "for /F "delims=" %L in ('find /V /C "" "filepath"') do set "LINE=%L" & echo LINE=!LINE:*: =!" 

或者用下面类似的代码创建一个批处理文件(称为line_cnt.bat ,代替find命令行:

 @echo off setlocal EnableDelayedExpansion for /F "delims=" %%L in (' find /V /C "" "filepath" ') do ( set "LINE=%%L" echo !LINE:*: =! ) endlocal 

为了达到这个目的,你需要把它放在你的进程正确的工作目录下,用它的完整路径调用line_cnt.bat ,或者把它包含的目录包含在你系统的搜索PATH中。

这适用于我在Windows 7上:

type pretty-print-example.R |\windows\system32\find.exe /i /v /c ""

输出只是行数,82