如何以递归方式计算文件夹中的换行符?

如何以递归方式计算文件夹中的换行符?

我想学习一种本机命令行方法来计算 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

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 目录- 显示文件和子文件夹的列表。
  • 寻找- 在文件中搜索文本字符串并显示找到该字符串的所有行。
  • 对于/f- 循环命令以执行另一个命令的结果。

答案3

这将计算 Powershell 在 MyTargetPath 中定义的所有行

Get-Content (Get-ChildItem -Recurse -Path MyTargetPAth -file).FullName | measure -line

首先设置 MyTargetPath。

答案4

如果您要处理非常大的文件,那么使用文件重定向比使用 PIPE 的性能提升会相当大。使用一个 437MB 的文件进行测试,该文件包含 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%

相关内容