2.

Windows dir コマンド 完全ガイド(オプション一覧 / 隠しファイル / 再帰 / バッチ用途 / Get-ChildItem)

編集
この記事の要点
  • dir は Windows コマンドプロンプト(cmd)の内部コマンドで、カレントディレクトリのファイル・サブディレクトリの一覧を表示する
  • Linux / macOS の ls 相当。PowerShell では Get-ChildItem(エイリアスとして dirls どちらも使える)
  • 主なオプションは /p(ページャ)、/w(横並び)、/s(再帰)、/a(隠しファイル)、/o(ソート)、/b(名前のみ・スクリプト用)
  • ワイルドカード *.log? によるパターン絞り込み、リダイレクト > out.txt でファイル化が可能
  • PowerShell の dir は cmd と出力形式が異なるため、バッチスクリプトを書くときは想定環境を意識する

dir コマンドとは

dir は Windows の cmd.exe(コマンドプロンプト)に組み込まれた内部コマンドで、カレントディレクトリにあるファイルとサブディレクトリの一覧を表示します。各項目の更新日時、サイズ、ファイル数・合計サイズも一緒に表示され、Linux/Mac の ls -l に最も近いコマンドです。

基本構文

dir [パス] [オプション]

パスを省略するとカレントディレクトリが対象になります。

基本的な使い方

:: カレントディレクトリの内容を表示
> dir

:: 指定パスのフォルダを表示
> dir C:\Users

:: パスに空白が含まれる場合はダブルクオートで囲む
> dir "C:\Program Files"

よく使うオプション一覧

オプション意味
/p1 画面ずつ表示(スペースキーで次ページ)
/w横並びでファイル名のみ表示(ワイド表示)
/sサブディレクトリも再帰的に表示
/a隠しファイル・システムファイルも含めて表示
/a:dディレクトリだけを表示
/a:-dファイルだけを表示(ディレクトリを除外)
/a:h隠し属性が付いた項目のみ
/o:n名前順ソート
/o:-d更新日時の新しい順
/o:sサイズの小さい順(-s で大きい順)
/bファイル名だけ表示(バッチスクリプト向け)
/t:c作成日時を基準にする(/t:w 更新日時 / /t:a 最終アクセス)
/r代替データストリームも表示
/q所有者を表示

実用例

:: サブディレクトリも再帰的に全部表示
> dir /s

:: .log ファイルだけ抽出
> dir *.log

:: 名前一覧をスクリプト用にプレーン出力
> dir /b *.txt

:: 更新が新しい順に並べる
> dir /o:-d

:: 隠しファイルも含めてサイズの大きい順で表示
> dir /a /o:-s

:: ディレクトリのみを名前順で表示
> dir /a:d /o:n

:: 結果をテキストファイルにリダイレクト
> dir /s /b > files.txt

:: 行数をカウント (find /c は文字列カウントだが空文字列で全行ヒット)
> dir /b *.txt | find /c /v ""

PowerShell では Get-ChildItem

PowerShell では dirGet-ChildItem のエイリアスです。同じ感覚で打てますが、出力はファイルオブジェクトなのでパイプラインで強力に処理できます。

# 一覧
PS> Get-ChildItem
PS> dir   # エイリアス
PS> ls    # こちらもエイリアス

# 再帰 + 拡張子フィルタ
PS> Get-ChildItem -Recurse -Filter *.log

# 1MB 超のファイルのみ
PS> Get-ChildItem -Recurse | Where-Object { $_.Length -gt 1MB }

# ファイル名だけ取り出す
PS> Get-ChildItem -Name *.txt

# 最終更新日時で降順ソート
PS> Get-ChildItem | Sort-Object LastWriteTime -Descending

関連コマンド

コマンド役割
cd / chdirカレントディレクトリの移動
treeディレクトリ構造をツリー表示
wherePATH 上のファイル検索
findstrファイル内文字列検索(Linux の grep 相当)
attribファイル属性の確認・変更

注意点

  • PowerShell の dir と cmd の dir は出力形式が異なる。バッチスクリプトでパースする場合はどちらで動かすかを意識する
  • 大量のファイルがあるディレクトリで dir /s は時間がかかる。必要なら出力をファイルにリダイレクトしてから加工する
  • 日本語ファイル名で文字化けする場合は chcp 65001 で UTF-8 に切り替える
  • NTFS 圧縮 / 暗号化ファイルでもサイズは「論理サイズ」を表示するので、ディスク使用量を厳密に見たいときは別ツールを使う

パイプとリダイレクトの組み合わせ

dir 単体ではフィルタやカウントの機能が弱いため、find / findstr / more とパイプで組み合わせるのが定番です。リダイレクト記号 > で結果をファイルへ書き出すと、後から差分比較や grep にかけられます。

:: 文字列を含むファイル名だけ抽出
> dir /b | findstr /i "report"

:: ファイル数のカウント
> dir /b *.txt | find /c /v ""

:: 1 画面ずつ表示(巨大ディレクトリ用)
> dir /s | more

:: 結果をテキストファイルへ書き出し
> dir /s /b > all-files.txt

:: 標準エラーも一緒に捨てる
> dir notfound.* 2>nul

戻り値とエラーハンドリング

dir はマッチするファイルが 1 件もない場合に終了コード 1 を返し、「ファイルが見つかりません」と表示します。バッチスクリプトでは %ERRORLEVEL% を見て分岐できます。

@echo off
dir /b *.log >nul 2>&1
if %ERRORLEVEL%==0 (
    echo .log ファイルが存在します
) else (
    echo .log ファイルはありません
)

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. cd ディレクトリの移動
  2. dir ファイル/ディレクトリ一覧表示
  3. ipconfig IP構成の確認
  4. hostname ホスト名の確認
  5. ping コマンド
  6. start プログラムの実行

最近更新/作成されたページ