フォルダー内の改行を再帰的にカウントするにはどうすればよいですか?

フォルダー内の改行を再帰的にカウントするにはどうすればよいですか?

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

参考文献

答え3

これは、PowershellがMyTargetPathで定義する行をすべてカウントします。

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

まず MyTargetPath を設定してください。

答え4

非常に大きなファイルを処理する場合、PIPE を使用するよりもファイル リダイレクトを使用するとパフォーマンスが大幅に向上します。8,895,540 行の 437 MB ファイルでテストしました。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%

関連情報