使用find仅返回数字

时间:2015-10-27 20:28:52

标签: windows batch-file cmd

我有一个基本上需要调用的外部进程:

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

它计算文本文件中的行数。如果有更好的方法来获得整数,那也很好。

使用find,full命令会返回除计数之外的一些信息,例如,它会为每个出现的文件名返回一些破折号,然后:10。

所以:

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

有没有办法让find只返回整数部分?或者我是否需要将该输出传递到另一个进程(类似于unix上的grep)?

5 个答案:

答案 0 :(得分:2)

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

find /v /c "" <file.txt

要将此输出变为变量,请使用此for语句:

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

(要在命令行上使用,请使用单%i代替%%i

答案 1 :(得分:1)

我相信您需要将find的结果导入另一个实用程序,例如findstr 2

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

根据您提供的搜索filepath,可能会有多个条目返回。为了确保结果有意义,find必须为您提供filepath,以便为您提供适当的背景信息。

所以你想要发一些 1 之类的东西:

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

1 请注意:我尚未确认findstr内的正则表达式是否有效。
2 显然findstr returns the entire line as well因此您需要找到不同的命令。

答案 2 :(得分:1)

您可以使用以下语法执行此操作:

type filepath | find /c /v ""

原始来源here

type filepath

返回文件的行,而

find /c /v ""

返回它们的数量(显然“”搜索词是查找的 bug 功能,允许你计算行数。)

答案 3 :(得分:1)

您可以尝试通过以下命令行替换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,或者将其包含的目录包含在搜索{{1}中你的系统。

答案 4 :(得分:0)

这适用于Windows 7:

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

输出只是行数,82