如何计算文本文件中的行数并使用批处理脚本将值存储到变量中?

ras*_*hok 52 windows cmd batch-file

我想计算文本文件中的行数,然后将值存储到环境变量中.计算行数的命令是

findstr /R /N "^" file.txt | find /C ":"

我提到了如何使用bat脚本将命令表达式的结果存储在变量中的问题? 然后我试过,

set cmd="findstr /R /N "^" file.txt | find /C ":" "

我收到错误消息,

FIND: Parameter format not correct

我怎么能摆脱这个错误.

use*_*771 92

有一种比所有其他方法简单得多的方法.

find /v /c "" filename.ext
Run Code Online (Sandbox Code Playgroud)

显然,从传统的MS-DOS时代保留.更多信息:http://blogs.msdn.com/b/oldnewthing/archive/2011/08/25/10200026.aspx

使用示例:

adb shell pm list packages | find /v /c ""
Run Code Online (Sandbox Code Playgroud)

如果您的Android设备已连接到您的PC并且您的路径上有Android SDK,则会打印出设备上安装的应用程序数量.

  • 这不符合将值存储在环境变量中的要求. (6认同)
  • 我不知道为什么这个答案这么多。较早的响应包括相同的“ find”命令,但也按要求在变量中提供了计数。 (3认同)
  • 干净而且相当高效。好的。 (2认同)
  • @ChrisJJ,如果您设置的子例程(或.bat)仅对/ f“ tokens = *” %% A in('%2%3%4%5%6%7%8%9 ')设置“%1 = %% A” __退出\ B`,您可以像这样调用任何单行输出程序并将其保存到var中;调用:SET varName find / v / c“” filename.ext(其中__是换行符) (2认同)

jeb*_*jeb 36

您可以使用FOR/F循环将输出分配给变量.

我使用了cmd-variable,因此不需要转义cmd-string中的管道或其他字符,因为延迟扩展将字符串"未更改"传递给FOR-Loop.

@echo off
cls
setlocal EnableDelayedExpansion
set "cmd=findstr /R /N "^^" file.txt | find /C ":""

for /f %%a in ('!cmd!') do set number=%%a
echo %number%
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!我只是在这里尝试计算目录中所有文件的行数,它也运行良好.只需将`file.txt`替换为`*.txt`并等待.:) (2认同)

Tin*_*nth 17

受以前帖子的启发,这样做的方式更短:

CMD.exe
C:\>FINDSTR /R /N "^.*$" file.txt | FIND /C ":"
Run Code Online (Sandbox Code Playgroud)

行数

试试吧.它适用于我的控制台.

编辑:

(删除了"$"标志)

FINDSTR /R /N "^.*" file.txt | FIND /C ":"
Run Code Online (Sandbox Code Playgroud)

$将数字减少1,因为它接受第一行作为字段名称,然后计算行数.


Ton*_*ony 9

试试这个:

@Echo off
Set _File=file.txt
Set /a _Lines=0
For /f %%j in ('Find "" /v /c ^< %_File%') Do Set /a _Lines=%%j
Echo %_File% has %_Lines% lines.
Run Code Online (Sandbox Code Playgroud)

它消除了额外的FindStr,不需要扩展.


- 编辑使用ChrisJJ的重定向建议.删除TYPE命令使其快三倍.

  • 谢谢。这得到了我的投票:)。但我发现不需要 type 命令。`对于 ('Find "" /v /c ^&lt; %_File%') 中的 /f %%j,请设置 /a _Lines=%%j` (2认同)