这是我的脚本,它的作用是计算当前文件夹中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
答案 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%"