我有一个基本上需要调用的外部进程:
int myInt = exec('find /v /c "" filepath');
它计算文本文件中的行数。如果有更好的方法来获得整数,那也很好。
使用find,full命令会返回除计数之外的一些信息,例如,它会为每个出现的文件名返回一些破折号,然后:10。
所以:
---------- filepath :10
有没有办法让find只返回整数部分?或者我是否需要将该输出传递到另一个进程(类似于unix上的grep)?
答案 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