Windows 使用“查找”仅返回数字
我有一个外部流程,基本上需要调用:Windows 使用“查找”仅返回数字,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个外部流程,基本上需要调用: int myInt = exec('find /v /c "" filepath'); 它计算文本文件中的行数。如果有更好的方法来获得整数,那也会很好 使用find时,full命令会返回除计数之外的大量信息,例如,它会为每次出现返回一些破折号、文件名,然后返回:10 因此: 有没有办法让find只返回整数部分?或者我需要将该输出通过管道传输到另一个进程(类似于unix上的grep)?我相信您需要将find的结果通过管道传输到另一个实用程序,例如2 原因是:/
int myInt = exec('find /v /c "" filepath');
它计算文本文件中的行数。如果有更好的方法来获得整数,那也会很好
使用find时,full命令会返回除计数之外的大量信息,例如,它会为每次出现返回一些破折号、文件名,然后返回:10
因此:
有没有办法让find只返回整数部分?或者我需要将该输出通过管道传输到另一个进程(类似于unix上的grep)?我相信您需要将
find
的结果通过管道传输到另一个实用程序,例如2
原因是:/C选项仅显示包含字符串的行数。
根据您提供的搜索filepath
,可能会有多个返回项。为了确保结果有意义,find
必须为您提供文件路径
,以便为您提供适当的上下文
因此,您希望发布如下内容:
1请注意:我尚未验证findstr
中的正则表达式是否有效。2显然
findstr
因此您需要找到不同的命令。您可以使用以下语法执行此操作:
type filepath | find /c /v ""
原始来源
返回文件的行,而
find /c /v ""
返回它们的数量(显然“搜索词”是find的一个bug功能,允许您计算行数)。您可以尝试用以下命令行替换
find/v/c”文件路径部分:
cmd /V:ON /C "for /F "delims=" %L in ('find /V /C "" "filepath"') do set "LINE=%L" & echo LINE=!LINE:*: =!"
@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%L in ('
find /V /C "" "filepath"
') do (
set "LINE=%%L"
echo !LINE:*: =!
)
endlocal
或者创建一个批处理文件,例如line\u cnt.bat
,其中包含以下类似代码,您可以调用这些代码来代替find
命令行:
cmd /V:ON /C "for /F "delims=" %L in ('find /V /C "" "filepath"') do set "LINE=%L" & echo LINE=!LINE:*: =!"
@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%L in ('
find /V /C "" "filepath"
') do (
set "LINE=%%L"
echo !LINE:*: =!
)
endlocal
为了使其工作,您需要将其放置在流程的正确工作目录中,使用其完整路径调用line\u cnt.bat
,或者将其包含目录包含在系统的搜索路径中。find
在处理文件时给出输出。如果它处理STDIN,则只提供以下数字:
find /v /c "" <file.txt
(要在命令行上使用,请使用单个%i
而不是%i
)这在Windows 7上适用:
键入pretty print example.R |\windows\system32\find.exe/i/v/c”“
输出只是行数,82findstr
将返回包含匹配项的整行,因此输出将是相同的。。。正则表达式是正确的…@aschipfl-谢谢。我想你是说构成管道的|
| |
是一个条件命令分隔符,意味着只有当左命令失败时才执行右命令(非零返回代码)type filepath | find/C/V”“
提供与find/C/V”“filepath
相同的结果,但管道变量的性能较差,因为它必须为管道两侧创建额外的命令提示实例@aschipfl:关于糟糕的表现,你是对的,但不是“相同的结果”。如果find从Stdin而不是磁盘文件读取其输入,则不会显示文件名(因为在本例中没有文件)。
find /v /c "" <file.txt
for /f %%i in ('find /v /c "" ^<file.txt') do set myint=%%i
echo %myint%