
Я хотел бы изучить собственный метод командной строки для подсчета строк кода в любом проекте, сохраненном в Windows.
Таким образом, независимо от того, где я работаю и с каким языком/IDE я работаю, с помощью одной команды можно определить, насколько велик проект.
Предположим, что я хочу указать конкретное расширение файла в целевом каталоге (и всех подкаталогах). Какой может быть эффективный способ рекурсивного подсчета количества переносов строк в папке (и подпапках) из командной строки Windows?
решение1
Если вам нужно только общее количество строк из командной строки Windows
(for /r "c:\somewhere" %a in (*.c) do @type "%a")|find /c /v ""
решение2
Как рекурсивно подсчитать количество строк в файлах в папке?
Используйте следующий пакетный файл (countlines.cmd)
@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq" %%a in (`dir /b /s %1`) do (
echo processing file %%a
for /f "usebackq" %%b in (`type %%a ^| find "" /v /c`) do (
echo line count is %%b
set /a lines += %%b
)
)
echo total lines is %lines%
Примечания:
- Общее количество строк хранится в
%lines%
. echo ...
при необходимости удалите для обеспечения бесшумной работы.
Использование:
countlines filename_expression
Пример:
countlines *.java
выведет следующее:
processing file F:\projects\test\foo.java
line count is 10
processing file F:\projects\test\test.java
line count is 106
processing file F:\projects\test\Wheel4Applet.java
line count is 350
total lines is 466
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- реж- Отображение списка файлов и подпапок.
- находить- Поиск текстовой строки в файле и отображение всех строк, где она найдена.
- для /ф- Циклическая команда по результатам другой команды.
решение3
Это позволит подсчитать все строки, которые Powershell определяет в MyTargetPath.
Get-Content (Get-ChildItem -Recurse -Path MyTargetPAth -file).FullName | measure -line
Сначала настройте MyTargetPath.
решение4
Если вы имеете дело с очень большими файлами, то при использовании перенаправления файлов по сравнению с использованием PIPE вы получите значительный прирост производительности. Тестирование с файлом размером 437 МБ, содержащим 8 895 540 строк. Передача по конвейеру в команду find заняла 14,6 секунды. При использовании перенаправления потребовалось всего 5,4 секунды. Если вы считаете файлы меньшего размера, разница, конечно, будет незначительной.
@echo off
set "lines=0"
for /f "usebackq" %%a in (`dir /b /s %1`) do (
echo processing file %%a
for /f %%b in ('find /V /C "" ^<"%%a"') do (
echo line count is %%b
set /a lines+=%%b
)
)
echo total lines is %lines%