Windowsコマンドプロンプトでテキストファイルの行数をカウントする方法

Windowsでテキストファイルの行数を調べる基本コマンドは find /c /v "" "sample.txt" です。ファイル名を表示せず数値だけ欲しい場合は入力リダイレクトを使います。本記事では、空白を含むパス、条件付きカウント、複数ファイルのバッチ処理と、文字コードで結果が合わない場合の確認方法を説明します。

目次

すぐ使う:全行数を数えるコマンド

find /c /v "" "C:\Logs\sample.txt"
find /c /v "" < "C:\Logs\sample.txt"

上の例はファイル名付き、下の例は数値だけを表示します。パスは実在するものに置き換えてください。以下の find、for、< の例は cmd.exe(コマンドプロンプト)用です。Windows TerminalのタブがPowerShellになっている場合は、コマンドプロンプトのプロファイルを開きます。通常の読み取り可能なファイルなら管理者権限は不要です。

コマンドプロンプトの基本操作

コマンドプロンプトを使い始めるには、まずその基本的な操作方法を理解する必要があります。以下に、コマンドプロンプトの開き方と基本的な使い方について説明します。

コマンドプロンプトの開き方

Windowsのスタートメニューを開き、「cmd」と入力し、表示された「コマンドプロンプト」アプリをクリックします。これでコマンドプロンプトが開きます。

基本的な使い方

コマンドプロンプトでは、コマンドを入力して様々な操作を実行できます。たとえば、ディレクトリの内容を表示するためには「dir」コマンドを使用します。また、「cd」コマンドを使ってディレクトリを移動できます。

基本コマンドの例

  1. ディレクトリの内容を表示する:
dir
  1. ディレクトリを移動する:
cd /d "C:\Logs"

これらの基本操作を理解することで、コマンドプロンプトでの作業がスムーズに進むようになります。次に、テキストファイルの行数をカウントする方法について説明します。

単純な行数カウント方法

テキストファイルの行数をカウントするための基本的な方法として、find コマンドを使用します。この方法は簡単で、ファイルの全行数をすぐに知ることができます。

find コマンドの使い方

find コマンドを使用して、ファイル内の行数をカウントする手順は以下の通りです。

基本コマンド

find /c /v "" "ファイルのパス"

このコマンドの説明:

  • /c: 行数をカウントするオプション
  • /v "": 空行を含むすべての行をカウントするためのオプション
  • [ファイル名]: 行数をカウントしたいファイルの名前

具体例

例えば、sample.txt という名前のテキストファイルの行数をカウントする場合は、以下のコマンドを実行します。

find /c /v "" "sample.txt"

このコマンドを実行すると、sample.txt の行数が表示されます。

出力結果の解釈

以下は説明用の出力例です。件数はファイルの内容によって変わります:

---------- SAMPLE.TXT: 10

ここで、10 は sample.txt の行数を示しています。

この方法を使えば、一般的なテキストファイルの行数を確認できます。文字コードや特殊な改行を含むファイルでは、後述の確認も必要です。次に、特定の条件に基づいた行数カウント方法について説明します。

条件付き行数カウント

特定の条件に基づいて行数をカウントする場合も、find コマンドを利用できます。ここでは、特定の文字列を含む行のみをカウントする方法を説明します。

特定の文字列を含む行のカウント

数えるのは文字列の出現回数ではなく、一致する行の数です。1行にerrorが2回あっても1行です。findの検索文字列は正規表現ではありません。大文字と小文字を区別しない場合は /i を加えます。特定の文字列を含む行をカウントするためには、find コマンドの /c オプションと文字列を指定します。

基本コマンド

find /c "検索文字列" "ファイルのパス"

このコマンドの説明:

  • /c: 行数をカウントするオプション
  • [検索文字列]: 検索したい文字列
  • [ファイル名]: 行数をカウントしたいファイルの名前

具体例

例えば、sample.txt ファイル内で “error” という文字列を含む行の数をカウントする場合、以下のコマンドを実行します。

find /c "error" "sample.txt"

このコマンドを実行すると、”error” を含む行数が表示されます。

出力結果の解釈

以下は説明用の出力例です。件数はファイルの内容によって変わります:

---------- SAMPLE.TXT: 3

ここで、3 は “error” を含む行数を示しています。

この方法を使うことで、ファイル内の特定の条件に基づいた行数を簡単にカウントできます。次に、パイプを使った高度な行数カウント方法について説明します。

パイプを使った高度な行数カウント

複数のコマンドを組み合わせて行数をカウントする方法について説明します。ここでは、type コマンドと find コマンドをパイプで接続して、より高度な行数カウントを行います。

複数のコマンドの組み合わせ

ファイルの内容を表示する type コマンドと、特定の条件で行をカウントする find コマンドを組み合わせることで、複雑な条件に対応できます。

基本コマンド

type "ファイルのパス" | find /c "検索文字列"

このコマンドの説明:

  • type [ファイル名]: ファイルの内容を表示
  • |: コマンドをパイプで接続
  • find /c "[検索文字列]": 特定の文字列を含む行数をカウント

具体例

例えば、sample.txt ファイル内の “warning” という文字列を含む行数をカウントする場合、以下のコマンドを実行します。

type "sample.txt" | find /c "warning"

このコマンドを実行すると、sample.txt の内容から “warning” を含む行数がカウントされます。

出力結果の解釈

以下は説明用の出力例です。件数はファイルの内容によって変わります:

5

ここで、5 は “warning” を含む行数を示す説明用の値です。パイプで標準入力を受け取る場合、find は元のファイル名を付けません。ファイルを直接指定する例の見出しとは異なります。単一ファイルなら find /c "warning" < "sample.txt" と書くこともできます。パイプの前段で読み取りエラーが出た場合、後段の数値だけを正常な件数として扱わないでください。

この方法を使えば、ファイルの内容を様々な条件で柔軟にカウントできます。次に、バッチファイルを使って行数カウントを自動化する方法について説明します。

スクリプトを使った自動化

行数カウントの作業を自動化するために、バッチファイルを作成します。バッチファイルを使えば、繰り返し行う作業を効率化できます。

バッチファイルの基本

バッチファイルは、コマンドを自動的に実行するスクリプトです。拡張子 .bat または .cmd のファイルとして保存します。

基本的なバッチファイルの例

以下のようなバッチファイルを作成して、指定したファイルの行数をカウントできます。

@echo off
set "filename=%~dp0sample.txt"
find /c /v "" "%filename%"
pause

バッチファイルの内容説明

  • @echo off: コマンドのエコーをオフにします。
  • set "filename=%~dp0sample.txt": 行数をカウントするファイル名を設定します。
  • find /c /v "" "%filename%": 指定したファイルの全行数をカウントします。%~dp0 はバッチ自身があるフォルダーを表します。
  • pause: 実行結果を確認するために一時停止します。

バッチファイルの実行

バッチファイルを作成したら、ファイルをダブルクリックするだけで行数カウントが自動的に実行されます。

応用例

複数のファイルに対して行数をカウントするバッチファイルを作成することもできます。例えば、ディレクトリ内のすべてのテキストファイルの行数をカウントする場合は、以下のようなスクリプトを使用します。

@echo off
for %%f in (*.txt) do (
    if exist "%%~f" find /c /v "" "%%~f"
)
pause

このスクリプトでは、ディレクトリ内のすべての .txt ファイルに対して find コマンドを実行し、それぞれの行数をカウントします。

次に、これらの方法を応用して複数ファイルの行数をカウントする方法についてさらに詳しく説明します。

複数ファイルの条件付きカウント

上の for %%f in (*.txt) は現在の作業フォルダーのファイルを対象にします。バッチの保存場所と同じとは限らないので、実行前に対象フォルダーへ移動してください。サブフォルダーは含みません。%%f はバッチ用で、cmdに直接入力するときは %f にします。内容を for /f で読み取る方法は空行をスキップするため、全行数のカウントに置き換えないでください。

特定の条件に基づく複数ファイルの行数カウント

特定の文字列を含む行数を複数のファイルに対してカウントする方法も紹介します。以下のスクリプトを使用します。

バッチファイルの例

@echo off
set "searchStr=error"
for %%f in (*.txt) do (
    if exist "%%~f" find /c "%searchStr%" "%%~f"
)
pause

バッチファイルの内容説明

  • set "searchStr=error": 検索する文字列を設定します。
  • for %%f in (*.txt) do: ディレクトリ内のすべての .txt ファイルに対してループ処理を行います。
  • find /c "%searchStr%" "%%~f": 指定した文字列を含む行数をカウントします。

応用例の利点

この方法を使うことで、複数のファイルを一括で効率的に処理でき、手作業で個別にコマンドを実行する手間を省けます。

次に、行数カウントに関してよくある問題とその解決方法について説明します。

トラブルシューティング

行数カウントに関して、よくある問題とその解決方法について説明します。これらのトラブルシューティング方法を知っておけば、問題が発生した場合にも迅速に対応できます。

問題1: コマンドが見つからない

原因

コマンドプロンプトで find コマンドが認識されない場合があります。

解決方法

  • 環境変数のパスを確認して、C:\Windows\System32 が含まれていることを確認します。
  • "%SystemRoot%\System32\find.exe" /c /v "" "sample.txt" と完全パスで切り分けます。別のツールのfindが呼ばれている可能性もあります。原因を確認する前にPATH全体を上書きしないでください。

問題2: ファイルが見つからない

原因

指定したファイルが存在しないか、パスが正しくない場合があります。

解決方法

  • ファイル名やパスを再確認し、正しいことを確認します。
  • フルパスを指定して、ファイルを明確に指定します。

問題3: パーミッションエラー

原因

ファイルやディレクトリにアクセスする権限がない場合があります。

解決方法

  • 自分に読み取り権限があるファイルか、別のアプリが排他的に使用していないかを確認します。
  • 会社の共有フォルダーや他人のファイルなら管理者に確認します。件数確認のためだけに所有権やアクセス権を変更しないでください。

問題4: 特定の文字列を含む行がカウントされない

原因

大文字と小文字が区別されている場合や、検索文字列が正しくない場合があります。

解決方法

  • find コマンドに /I オプションを追加して、大文字と小文字を無視するようにします。
find /c /I "検索文字列" "ファイルのパス"

問題5: コマンドの実行結果が正しく表示されない

原因

コマンドの構文エラーや不正なオプションが使用されている可能性があります。

解決方法

  • コマンドの構文を再確認し、正しい形式で入力されていることを確認します。
  • 必要なオプションが正しく指定されているか確認します。

これらのトラブルシューティング方法を参考にして、問題が発生した場合にも迅速に解決できるようにしましょう。次に、行数カウント方法のまとめと重要ポイントの復習を行います。

空行・文字コード・エラーをどう扱うか

全行数を数える定型句 /c /v "" は空行も対象とします。対して、特定の文字列を含む行だけ数える場合は空行は一致しません。空のファイルは0行です。findがファイルを開けないときのエラーを「0行」と読み替えないでください。公式の終了コードは、一致ありが0、一致なしが1、ファイルが見つからない・構文が不正などのエラーが2です。echo %errorlevel% で確認する場合はfindの直後に実行します。

UTF-8、UTF-16、従来の日本語文字コードなどが混在する場合や、想定と違う改行・非常に長い行を持つ場合は、小さな既知のサンプルで照合してください。画面の折り返しは行数に含みません。また、CSVの引用符内に改行があるとき、物理的なテキスト行数はCSVのレコード数とは一致しません。ログが書き込み中なら実行のたびに件数が変わることもあります。

PowerShellでUTF-8のファイルを数える場合

以下はcmdではなくPowerShell用です。読み取りに失敗した場合に0と表示しないよう、-ErrorAction Stop とtry/catchを使用しています。UTF-8以外のファイルには実際の文字コードに合う設定を使ってください。

try {
    (Get-Content -LiteralPath 'C:\Logs\sample.txt' -Encoding UTF8 -ErrorAction Stop |
        Measure-Object).Count
} catch {
    Write-Error $_
}

Get-Contentの既定の行単位出力をMeasure-Objectで数えます。-Raw を付けると全体が1つの文字列になり、この方法の件数が変わります。これはファイル全体を配列に格納してからCountを取る例ではありませんが、大容量ファイルの速度は環境や内容に依存します。本記事に掲載した出力値は説明用で、Windows実機での計測結果ではありません。

まとめ

この記事では、Windowsコマンドプロンプトを使用してテキストファイルの行数をカウントする方法について説明しました。基本的な find コマンドの使用方法から始め、特定の条件に基づく行数カウントや、パイプを使った高度なカウント方法、そしてバッチファイルを使った自動化について詳しく解説しました。また、複数ファイルに対する応用例や、よくある問題のトラブルシューティングも紹介しました。

これらの方法を活用することで、ファイルの内容を効率的に管理し、作業を自動化することができます。特に、バッチファイルを使って繰り返し作業を自動化することで、時間と労力を大幅に節約できます。

最後に、行数カウントの重要なポイントを復習します:

  • 基本的な行数カウントには find /c /v "" ファイル名 を使用する。
  • 特定の条件に基づくカウントには find /c "検索文字列" ファイル名 を使用する。
  • 複数のコマンドを組み合わせて、柔軟に行数をカウントする。
  • バッチファイルを作成して、行数カウントを自動化する。

これらの技術を駆使して、コマンドプロンプトを使った効率的なファイル管理を実現しましょう。

公式資料

Microsoft Learn:find / for / Get-Content / Measure-Object

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次