Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用“查找”仅返回数字_Windows_Batch File_Cmd - Fatal编程技术网

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”“


输出只是行数,82

findstr
将返回包含匹配项的整行,因此输出将是相同的。。。正则表达式是正确的…@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%