如何计算文本文件中的行数,并使用批处理脚本将值存储到variables中?
我想计算文本文件中的行数,然后将该值存储到环境variables中。 计数行号的命令是
findstr / R / N“^”file.txt | find / C“:”
我提到的问题如何使用蝙蝠脚本将命令expression式的结果存储在variables中? 然后我试了一下,
set cmd =“findstr / R / N”^“file.txt | find / C”:“”
我收到错误消息,
FIND:参数格式不正确
我怎么能摆脱这个错误。
您可以使用FOR / F循环将输出分配给一个variables。
我使用了cmd-variable
,所以不需要在cmd-string中转义pipe道或其他字符,因为延迟的扩展将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%
比其他所有方法都要简单得多。
find /v /c "" filename.ext
显然,从传统的MS-DOS时代延缓。 更多信息在这里: http : //blogs.msdn.com/b/oldnewthing/archive/2011/08/25/10200026.aspx
使用示例:
adb shell pm list packages | find /v /c ""
如果您的Android设备连接到您的电脑,并且您的path上有android SDK,则会打印出设备上安装的应用程序的数量。
受以前的post的启发,这样做的一个更短的方法:
CMD.exe C:\>FINDSTR /R /N "^.*$" file.txt | FIND /C ":"
行数
尝试一下。 它在我的控制台中工作。
编辑:
(“$”符号被删除)
FINDSTR /R /N "^.*" file.txt | FIND /C ":"
$将数字减1,因为它接受第一行作为字段名称,然后计算行数。
尝试这个:
@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.
它消除了额外的FindStr,不需要扩展。
– 编辑使用ChrisJJ的redirectbuild议。 删除TYPE
命令使其快三倍。
@Tony:你甚至可以摆脱type %file%
命令的type %file%
。
for /f "tokens=2 delims=:" %%a in ('find /c /v "" %_file%') do set /a _Lines=%%a
对于长文件,这应该更快。
我通常for /f %%a in (%_file%) do (set /a Lines+=1)
使用更多类似的内容for /f %%a in (%_file%) do (set /a Lines+=1)
我发现这个解决scheme最适合创build一个维护自己的日志文件:
setlocal enabledelayedexpansion SET /A maxlines= 10 set "cmd=findstr /R /N "^^" "filename.txt" | find /C ":"" for /f %%a in ('!cmd!') do set linecount=%%a GOTO NEXT :NEXT FOR /F %%A IN ("filename.txt") DO ( IF %linecount% GEQ %maxlines% GOTO ExitLoop echo %clientname% %Date% %Time% >> "filename.txt") EXIT :ExitLoop echo %clientname% %Date% %Time% > "filename.txt" EXIT
包括的环境variables是%clientname%远程客户端的计算机名称%Date%是当前date和%Time%当前时间。 :获取文件中的行数后调用NEXT。 如果文件行数大于%maxlines%variables,则它将转到:EXITLOOP,覆盖文件,用第一行信息创build一个新文件。 如果它小于%maxlines%variables,它只是将该行添加到当前文件。
在下面的代码中,variables名称是SalaryCount
和TaxCount
@ECHO OFF echo Process started, please wait... for /f %%C in ('Find /V /C "" ^< "D:\Trial\Salary.txt"') do set SalaryCount=%%C echo Salary,%SalaryCount% for /f %%C in ('Find /V /C "" ^< "D:\Trial\Tax.txt"') do set TaxCount=%%C echo Tax,%TaxCount%
现在,如果您需要将这些值输出到csv文件,您可以使用下面的代码。
@ECHO OFF cd "D:\CSVOutputPath\" echo Process started, please wait... echo FILENAME,FILECOUNT> SUMMARY.csv for /f %%C in ('Find /V /C "" ^< "D:\Trial\Salary.txt"') do set Count=%%C echo Salary,%Count%>> SUMMARY.csv for /f %%C in ('Find /V /C "" ^< "D:\Trial\Tax.txt"') do set Count=%%C echo Tax,%Count%>> SUMMARY.csv
>
将覆盖文件的现有内容,“ >>
将把新数据附加到现有数据。 CSV将在D:\ CSVOutputPath中生成
(`TYPE c:\ temp \ file.txt ^ | find / v / c“”```````设置numlines =%A
在batch file中,使用%% A而不是%A