スクリプトファイルの行数をカウントしよう


#背景
この[bat|SQL|sh]ってコメント除いたら何行あるの?
って聞かれたときにパッと分からなかったので。バッチにしました。

バッチ概要

シンプルな構文を繰り返しているだけです。こんな感じ。1ファイルを引数に取り、空白行と指定した文字から始まる行を除いて、行数をカウントします。
エラー処理は適当に書いています。

countLines.bat
if not "%2"=="" (
    echo *** 2つ以上の引数が指定されています。
    goto END_ERROR_ARG
)
if "%1"=="" (
    echo *** 行数カウント対象のファイルを指定してください ***
    goto END_ERROR_NOARG
)

set lines=0
if /i "%~x1"==".bat" (
    for /f "eol=@" %%i in ( %1 ) do ( set /a lines=lines+1 )
    goto END_SUCCESS
) else if /i  "%~x1"==".cmd" (
    for /f "eol=@" %%i in ( %1 ) do ( set /a lines=lines+1 )
    goto END_SUCCESS
) else if /i "%~x1"==".sh" (
    for /f "eol=#" %%i in ( %1 ) do ( set /a lines=lines+1 )
    goto END_SUCCESS
) else if /i "%~x1"==".sql" (
    for /f "eol=/" %%i in ( %1 ) do ( set /a lines=lines+1 )
    for /f "eol=-" %%i in ( %1 ) do ( set /a lines=lines+1 )
    goto END_SUCCESS
) else if /i "%~x1"==".ps1" (
    for /f "eol=#" %%i in ( %1 ) do ( set /a lines=lines+1 )
    goto END_SUCCESS
) else (
    set errroMsg=対象外のファイル拡張子が指定された
    goto END_OTHER_EXT
)

:END_SUCCESS
echo カウント結果[%~nx1]%lines% Lines
exit /b 0

:END_ERROR_ARG
echo 実行結果:引数エラー
exit /b 1

:END_ERROR_NOARG
echo 実行結果:引数なし
exit /b 2

:END_OTHER_EXT
echo 実行結果:対象外のファイル拡張子
exit /b 3

コメント行に使われるであろう文字を決め打ちにしてるので、柔軟性はあんまりないです。バッチファイルだと、
@￰REMとか、REMとか、;とかコメント扱いにできちゃいますしね…

こんな感じで使います。

countLines.bat xxx.bat

探せば、もっと簡単に行数カウントしてくれるエディタとか、プラグインとかあるんでしょうか?