批处理 - 计算当前文件夹和子文件夹中文件的行数

时间:2014-02-11 14:43:58

标签: batch-file recursion counting

这是我的脚本,它的作用是计算当前文件夹中cpp,h,hpp,cs,c文件的行数。

我想做的是计算子文件夹,但似乎我无法做到这一点。

我进行了一些递归尝试,但我无法在当前代码中实现它。

call::CountLines Modules\Output\HTML.Tidy\
goto:eof

:CountLines
setlocal
set /a totalNumLines = 0
SETLOCAL ENABLEDELAYEDEXPANSION
for /r %%f in (%~1*.cpp %~1*.h %~1*.hpp %~1*.cs %~1*.c) do (
for /f %%C in ('Find /V /C "" ^< %%f') do set Count=%%C
set /a totalNumLines+=!Count!
)

echo Total number of cod lines for %~1: %totalNumLines% >> log.txt

如果您知道解决方案或更好的方法,请告诉我。

此致

的Stefan

2 个答案:

答案 0 :(得分:7)

使用IN()时,路径信息不得在FOR /R子句内。根路径应该遵循/R选项。

@echo off

:CountLines
setlocal
set /a totalNumLines = 0
for /r %1 %%F in (*.cpp *.h *.hpp *.cs *.c) do (
  for /f %%N in ('find /v /c "" ^<"%%F"') do set /a totalNumLines+=%%N
)

echo Total number of code lines for %1 = %totalNumLines% >>log.txt

我不记得差异,但type file|find /c /v ""find /c /v "" <file可以给出不同的结果。我不记得触发条件是什么,或哪个更好。

答案 1 :(得分:0)

用手指:

@echo off
cd /d "%~1"
for /f "delims=" %%f in ('dir *.cpp *.h *.hpp *.cs *.c /b /s /a-d ^|find /c /v "" ') do set Count="%%f"
echo "%count%"