とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub
スポンサードリンク

dirコマンドでよく使うパラメータ・オプションまとめ

dirでファイル一覧を取得したい


フォルダの中のファイル数やサイズを確認する時はプロパティを確認すればひと目で分かるのだけど、
ファイル名やフォルダ構成まで確かめようとすると簡単にはいかないし、漏れも出ます。

ファイル確認

プロパティ確認
これじゃあ詳細が分からん。
フォルダ1の中にはフォルダが2個あって、それぞれのフォルダの中にはファイルが2つあるのだよ・・・

・ルートフォルダ(調べている場所)
├/ファイル1
├/ファイル2
├■フォルダ1
 ├/ファイル3
 ├/ファイル4
 ├■フォルダ2
  ├/ファイル5
  └/ファイル6
 └■フォルダ3
  ├/ファイル7
  └/ファイル8
└■フォルダ4
 ├/ファイル9
 ├/ファイル10
 ├■フォルダ5
  ├/ファイル11
  └/ファイル12
 └■フォルダ6
  ├/ファイル13
  └/ファイル14


この構成を出したい。
そこで、コマンドプロンプトでdirコマンドを使ってフォルダやファイル数を出力して
Excelにまとめたりして確かめるのですが
「dir」と単純に打ち込んでもやっぱり簡単にはリスト出力してくれません。
D:\command_dir>dir
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は 82E4-8442 です

D:\command_dir のディレクトリ

2013/08/03 22:27 <DIR> .
2013/08/03 22:27 <DIR> ..
2013/08/03 22:23 6 0001.txt
2013/08/03 22:23 6 0002.txt
2013/08/03 22:27 <DIR> フォルダ1
2013/08/03 22:28 <DIR> フォルダ2
2 個のファイル 12 バイト
4 個のディレクトリ 493,871,255,552 バイトの空き領域

ほらね。

求めてるのはこういう結果です。
D:\command_dir\0001.txt
D:\command_dir\0002.txt
D:\command_dir\フォルダ1\F1_FILE1.txt
D:\command_dir\フォルダ1\F1_FILE2.txt
D:\command_dir\フォルダ1\フォルダ1-1\F1F1_001.txt
D:\command_dir\フォルダ1\フォルダ1-1\F1F1_002.txt
D:\command_dir\フォルダ1\フォルダ1-2\F1F2_001.txt
D:\command_dir\フォルダ1\フォルダ1-2\F1F2_002.txt
D:\command_dir\フォルダ2\F2_FILE1.txt
D:\command_dir\フォルダ2\F2_FILE2.txt
D:\command_dir\フォルダ2\フォルダ2-1\F2F1_001.txt
D:\command_dir\フォルダ2\フォルダ2-1\F2F1_002.txt
D:\command_dir\フォルダ2\フォルダ2-2\F2F2_001.txt
D:\command_dir\フォルダ2\フォルダ2-2\F2F2_002.txt


dirコマンドのヘルプを表示させると、いつものごとく分かりにくい説明が出てきます。
D:\command_dir>dir /?
ディレクトリ中のファイルとサブディレクトリを一覧表示します。

DIR [ドライブ:][パス][ファイル名] [/A[[:]属性]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]ソート順]] [/P] [/Q] [/R] [/S] [/T[[:]タイムフィールド]] [/W] [/X] [/4]


[ドライブ:][パス][ファイル名]
一覧表示するドライブ、ディレクトリ、またはファイルを指定します。

/A 指定された属性のファイルを表示します。
属性 D ディレクトリ R 読み取り専用
H 隠しファイル A アーカイブ
S システム ファイル I 非インデックス対象ファイル
L 再解析ポイント - その属性以外
/B ファイル名のみを表示します (見出しや要約が付きません)。
/C ファイル サイズを桁区切り表示します。これは
既定の設定です。/-C とすると桁区切り表示されません。
/D /W と同じですが、ファイルを列で並べ替えた一覧を表示します。
/L 小文字で表示します。
/N ファイル名を右端に表示する一覧形式を使用します。
/O ファイルを並べ替えて表示します。
ソート順 N 名前順 (アルファベット) S サイズ順 (小さい方から)
E 拡張子順 (アルファベット) D 日時順 (古い方から)
G グループ (ディレクトリから) - 降順
続行するには何かキーを押してください . . .


・・・というわけで
dirコマンドの後ろにくっつけるパラメータ(オプション)
をまとめておきます。

調べたいフォルダを指定してコマンドプロンプトを開く


コマンドプロンプト画面は、ファイルを調べたいフォルダを開いて
Shiftボタンを押しながら右クリックします。

コマンドウィンドウをここで開く

すると、普段は見慣れない「コマンドウィンドウをここで開く」というメニューが出てくるので
クリックします。

すると
D:\command_dir\フォルダ1>

コマンドプロンプト上でそのフォルダに移動した状態でコマンドウィンドウが開始されます。
いちいちcdコマンドを使って、指定フォルダまで移動しなくてよいので便利です。

※このエントリでは、「コマンドプロンプト」と表現していますが
正式名は「コマンドウィンドウ」なのですね・・・

さて、コマンドプロンプトが利用出来る状態になったので
オプションパラメータを見て行きましょう。

空き容量や見出し・要約を出さない


/b オプションを指定します。
D:\command_dir>dir /b
0001.txt
0002.txt
フォルダ1
フォルダ2

そっけないですね!
フォルダの中とか全く無視。フォルダなのかファイルなのか分かりません。
ちなみに、Dは大文字でも小文字でもどちらでもOKです。

フォルダ名だけを取得


dir /ad オプションを指定します。

D:\command_dir>dir /ad
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は 82E4-8442 です

D:\command_dir のディレクトリ

2013/08/03 22:27 <DIR> .
2013/08/03 22:27 <DIR> ..
2013/08/03 22:27 <DIR> フォルダ1
2013/08/03 22:28 <DIR> フォルダ2
0 個のファイル 0 バイト
4 個のディレクトリ 493,871,255,552 バイトの空き領域


フォルダ1と2だけが出てますね。
こんなので誰もが分かるのか、という疑問が出てきますがディレクトリ(フォルダ)だという印である<DIR>という文字が申し訳なさそうに表示されてます。

それにしてもこの.は何なのでしょうか?
2013/08/03  22:28    <DIR>          .
2013/08/03 22:28 <DIR> ..

未だに良くわかりません。フォルダの数だけを見たい場合は無視して下さい。

2014/04/17 追記 コメント欄にてpoyon様より種明かししてもらいました!
<DIR> . はカレントディレクトリ
<DIR> .. は親ディレクトリ

↓こんな指定もアリです。

>dir ..\(同一階層の別ディレクトリ)
>cd ..\(同一階層の別ディレクトリ)
一回のコマンドで平行移動が出来ますね(*^_^*)
poyon様ありがとうござます!

/adですが
説明文を見ると、/A のところに「属性」というものがあって、「指定された属性のファイルを表示します。」
とか書いてます。
それが/adになぜつながるのか?!/a d かもしれないし、そもそも属性をどう書けば良いかを書いてないところが
いかにもです。ひどい。

  /A          指定された属性のファイルを表示します。
属性 D ディレクトリ R 読み取り専用
H 隠しファイル A アーカイブ
S システム ファイル I 非インデックス対象ファイル
L 再解析ポイント - その属性以外

とにかく、/adは、D:ディレクトリを表示しろってことのようです。

ファイル名だけを取得


dir /a-d オプションを指定します。

D:\command_dir>dir /a-d
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は 82E4-8442 です

D:\command_dir のディレクトリ

2013/08/03 22:23 6 0001.txt
2013/08/03 22:23 6 0002.txt
2 個のファイル 12 バイト
0 個のディレクトリ 493,871,255,552 バイトの空き領域

今度はフォルダじゃなくてファイル一覧を取得したいので
ファイルを・・・と思いきや属性に「ファイル」という漠然としたものがない。
ファイルには読み取り専用とか隠しファイルとか色々あるので
/ahsrai と全部指定しないとダメなんですね。
めんどくさい。

そこで「-」その属性以外
を利用して「a-d」と書きます。
これで「ディレクトリ以外」つまりファイルになるのですね。
分かるか!!

サブフォルダも検索


dir /s オプションを指定します。 

さて、お気づきのようにこれまでのコマンドだと
フォルダの中にあるファイルやフォルダは出てきていません。
そこで「/s」を使って全部出してもらいましょう。

D:\command_dir>dir /s
ドライブ D のボリューム ラベルは ボリューム です
ボリューム シリアル番号は 82E4-8442 です

D:\command_dir のディレクトリ

2013/08/03 22:27 <DIR> .
2013/08/03 22:27 <DIR> ..
2013/08/03 22:23 6 0001.txt
2013/08/03 22:23 6 0002.txt
2013/08/03 22:27 <DIR> フォルダ1
2013/08/03 22:28 <DIR> フォルダ2
2 個のファイル 12 バイト

D:\command_dir\フォルダ1 のディレクトリ

2013/08/03 22:27 <DIR> .
2013/08/03 22:27 <DIR> ..
2013/08/03 22:25 0 F1_FILE1.txt
2013/08/03 22:25 0 F1_FILE2.txt
2013/08/03 22:27 <DIR> フォルダ1-1
2013/08/03 22:27 <DIR> フォルダ1-2
2 個のファイル 0 バイト

D:\command_dir\フォルダ1\フォルダ1-1 のディレクトリ

2013/08/03 22:27 <DIR> .
2013/08/03 22:27 <DIR> ..
2013/08/03 22:26 0 F1F1_001.txt
2013/08/03 22:26 0 F1F1_002.txt
2 個のファイル 0 バイト

D:\command_dir\フォルダ1\フォルダ1-2 のディレクトリ

2013/08/03 22:27 <DIR> .
2013/08/03 22:27 <DIR> ..
2013/08/03 22:26 0 F1F2_001.txt
2013/08/03 22:26 0 F1F2_002.txt
2 個のファイル 0 バイト

D:\command_dir\フォルダ2 のディレクトリ

2013/08/03 22:28 <DIR> .
2013/08/03 22:28 <DIR> ..
2013/08/03 22:25 0 F2_FILE1.txt
2013/08/03 22:25 0 F2_FILE2.txt
2013/08/03 22:28 <DIR> フォルダ2-1
2013/08/03 22:28 <DIR> フォルダ2-2
2 個のファイル 0 バイト

D:\command_dir\フォルダ2\フォルダ2-1 のディレクトリ

2013/08/03 22:28 <DIR> .
2013/08/03 22:28 <DIR> ..
2013/08/03 22:26 0 F2F1_001.txt
2013/08/03 22:26 0 F2F1_002.txt
2 個のファイル 0 バイト

D:\command_dir\フォルダ2\フォルダ2-2 のディレクトリ

2013/08/03 22:28 <DIR> .
2013/08/03 22:28 <DIR> ..
2013/08/03 22:26 0 F2F2_001.txt
2013/08/03 22:26 0 F2F2_002.txt
2 個のファイル 0 バイト

ファイルの総数:
14 個のファイル 12 バイト
20 個のディレクトリ 493,871,255,552 バイトの空き領域



<DIR> . 
<DIR> ..

もたくさん。そりゃカレントディレクトリと親ディレクトリがあるのはわかるけどさ・・・
それを除くオプションも欲しいよね・・・

ファイルとフォルダの一覧をリストで取得


冒頭の目的であるフォルダの中のフォルダとファイルの一覧表示は
「/s」と「/b」を組み合わせて使います。

dir /s /b と打ち込むと
D:\command_dir>
D:\command_dir>dir /b /s
D:\command_dir\0001.txt
D:\command_dir\0002.txt
D:\command_dir\フォルダ1
D:\command_dir\フォルダ2
D:\command_dir\フォルダ1\F1_FILE1.txt
D:\command_dir\フォルダ1\F1_FILE2.txt
D:\command_dir\フォルダ1\フォルダ1-1
D:\command_dir\フォルダ1\フォルダ1-2
D:\command_dir\フォルダ1\フォルダ1-1\F1F1_001.txt
D:\command_dir\フォルダ1\フォルダ1-1\F1F1_002.txt
D:\command_dir\フォルダ1\フォルダ1-2\F1F2_001.txt
D:\command_dir\フォルダ1\フォルダ1-2\F1F2_002.txt
D:\command_dir\フォルダ2\F2_FILE1.txt
D:\command_dir\フォルダ2\F2_FILE2.txt
D:\command_dir\フォルダ2\フォルダ2-1
D:\command_dir\フォルダ2\フォルダ2-2
D:\command_dir\フォルダ2\フォルダ2-1\F2F1_001.txt
D:\command_dir\フォルダ2\フォルダ2-1\F2F1_002.txt
D:\command_dir\フォルダ2\フォルダ2-2\F2F2_001.txt
D:\command_dir\フォルダ2\フォルダ2-2\F2F2_002.txt


「/b」でよくわからない面倒な表示を省き、「/s」でサブフォルダもまとめて表示してもらうことになります。
/sと/bを使った時、全てのファイルが表示されることになりますが
どのファイルがどこにあるのか分からなくなってしまうので
ファイルのパスが表示されるようになります。
ここは気がききますね。

ファイルだけを取得したい場合はさらに組み合わせて
dir /s /b /a-d です。

D:\command_dir>dir /s /b /a-d
D:\command_dir\0001.txt
D:\command_dir\0002.txt
D:\command_dir\フォルダ1\F1_FILE1.txt
D:\command_dir\フォルダ1\F1_FILE2.txt
D:\command_dir\フォルダ1\フォルダ1-1\F1F1_001.txt
D:\command_dir\フォルダ1\フォルダ1-1\F1F1_002.txt
D:\command_dir\フォルダ1\フォルダ1-2\F1F2_001.txt
D:\command_dir\フォルダ1\フォルダ1-2\F1F2_002.txt
D:\command_dir\フォルダ2\F2_FILE1.txt
D:\command_dir\フォルダ2\F2_FILE2.txt
D:\command_dir\フォルダ2\フォルダ2-1\F2F1_001.txt
D:\command_dir\フォルダ2\フォルダ2-1\F2F1_002.txt
D:\command_dir\フォルダ2\フォルダ2-2\F2F2_001.txt
D:\command_dir\フォルダ2\フォルダ2-2\F2F2_002.txt


とりあえずお目当ての動きができました。

拡張子を指定


他には、txtファイルだけを抜き出したい場合があります。

そんな時は
「dir *.txt 」
です。

これは昔からあるwindowsの機能であるワイルドカードを使っています。
*「何でもいい何か」に.txtという指定になるので
「全てのテキストファイル」という指定ですね。

こんなものヘルプに書いてないぞ・・・と思いきやヘルプにある
[パス]これですね。うん。分からん。

他にも「dir "C:\foldername\" /b」などと書くことで
指定したパスのファイルを取得できるようです。

やっぱりコマンドプロンプトの説明は分かりにくいですね。

それでも、コマンドプロンプトは昔からある命令であり、一度覚えると新しくなることも無いです。
書籍も綺麗にまとめあげられてるものが明確なので、ババを掴まされないので安心です。



でもさ・・・ヘルプがもう少し分かりやすければ苦労も少ないんだよね・・・MSさん。
▼この記事を読んだ方は、こんな記事も読んでいます。▼

スポンサードリンク

テーマ:プログラミング - ジャンル:コンピュータ

コメント

その結果をパイプでclipに渡してクリップボードに取り込めばさらにハッピーに

  • 2014/02/28(金) 00:48:42 |
  • URL |
  • くらげ #-
  • [ 編集 ]

というわけでやってみました

くらげ様

ハッピーになるということでやってみました(笑)
コマンド:
 dir /s /b /a-d | clip

これは、ハッピーです!
いちいちテキスト経由しなくていいので便利ですね!

ご提案ありがとうございます!

  • 2014/03/04(火) 12:35:01 |
  • URL |
  • 管理人 #z9jllgzo
  • [ 編集 ]

.と..の意味

<DIR> . はカレントディレクトリ
<DIR> .. は親ディレクトリ

なので例えば
>dir ..
これで親ディレクトリに対してdirを実行。

  • 2014/04/17(木) 15:50:55 |
  • URL |
  • poyon #1jhbtX.k
  • [ 編集 ]

ありがとうございます!

poyon 様

書き込みありがとうございます。
「.」は相対パスのような扱いのものだったのですね。
とてもスッキリ納得しました!
お礼を申し上げますとともに、記事にも修正を行いますことをコメント欄にてご報告させていただきます。

ありがとうございます。

  • 2014/04/17(木) 16:54:17 |
  • URL |
  • 管理人 #z9jllgzo
  • [ 編集 ]

ちなみに・・・

↓こんな指定もアリです。

>dir ..\(同一階層の別ディレクトリ)
>cd ..\(同一階層の別ディレクトリ)

一回のコマンドで平行移動が出来ますね(*^_^*)

  • 2014/04/17(木) 17:22:00 |
  • URL |
  • poyon #1jhbtX.k
  • [ 編集 ]

poyon様のコメントを反映させていただきました

poyon様

記事本文に引用タグにて
poyon様のコメントを反映させていただきました。
ありがとうございます。
まだまだコマンドラインが苦手なので頑張ります。

  • 2014/04/17(木) 18:25:10 |
  • URL |
  • 管理人 #z9jllgzo
  • [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dalmore.blog7.fc2.com/tb.php/84-70af7c80
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad