こんなことを知りたい人へ向けて書いています
- フォルダ内にあるファイルの一覧を取得する方法を知りたい方
- 「dir」コマンドでお手軽に取得する方法を知りたい方
- 「dir」コマンドでの一覧化で、並び順を変更したい方
- 少し複雑だが、「for」コマンドを使って一覧書式を柔軟に編集できる方法を知りたい方
目次
その他の関連しそうな記事
「dir」コマンドでファイル名一覧を取得する
「dir」コマンドでファイル名の一覧を取得するには、「/b」オプションを指定します。
例えば、txtファイルのみをターゲットにファイル名を取得するには、
1 |
dir /b *.txt |
となります。以下、実行結果例です。
これをファイルに保存するには、「>」を使って、
1 |
dir /b *.txt > file.list |
とします。以下、実行結果と作成されたファイル内容を示します。
ここからは余談ですが、「dir」はそもそも指定したフォルダの情報を見るためのコマンドです。オプションを付けずに「dir」コマンドを実行するとフォルダやフォルダに入っているファイルの情報が詳しく表示されます。以下に、「dir」コマンドをオプション無しで実行した結果を示します。
様々な情報が記述されていますね。「/b」オプションはそのような情報をコンパクトにして、ファイルの名前に関する情報だけを表示するオプションなのです。
「dir」コマンドには「/b」オプションだけでなく様々なオプションが用意されています。詳細な情報は、「dir(ファイル名・フォルダ名を表示する) -コマンド別解説-」をご覧下さい。
並び順を様々な順番に変更する
「dir」コマンドを使う場合、並び順をいくつか指定することができます。それには「/o」オプションを使用します。使い方は以下の通りです。
1 |
dir /b /o:[並び順指定] |
[並び順指定]にはアルファベット一文字を指定しますが、以下のものが使えます。
n | 名前順(アルファベット・あいうえお・数字昇順) |
s | サイズ順(昇順) |
e | 拡張子順(昇順) |
d | 日時順(昇順) |
例えば、以下のような5つのファイルがあったとします。( )内はそのファイルのサイズを表示しています。
- file1.txt (1K)
- file2.txt (4K)
- file3.txt (2K)
- file4.txt (5K)
- file5.txt (3K)
サイズがバラバラであることに注意してください。
まずは「/o」オプションを指定しないで、一覧を表示させてみましょう。以下のようになります。
「/o」オプションを指定しない場合は名前順(昇順)になります。つまり、「/o:n」を指定したときと同じ動作をします。いまは、5つのファイルは4文字目の「file」の部分まで名前が同じですので、5文字目の数字で判断されます。従って、数字の若い方から順位並んでいることが分かります。
次に、「/o:s」オプションを指定してサイズ順に並び替えてみましょう。以下に実行結果を示します。
今度はファイルサイズが小さい方から順に並びました。他の[並び順指定]についても同様の方法で使用することができます。
また、[並び順指定]の前に「-(ハイフン)」をつけることで、昇順から降順に変更することができます。先ほどのサイズ順を今度はサイズの大きいほうから並び替えてみましょう。
今度はファイルの並びが逆になり、サイズの大きいほうが上にきていることが分かります。この「-」はすべての[並び順指定]に使用できます。
「for」コマンドでファイル名一覧を取得する
「dir」コマンドではなく「for」コマンドを用いてもファイル名一覧を取得することができます。
「for」コマンドでファイル名の一覧を取得するには、バッチファイルに、
1 2 3 4 5 6 7 |
@echo off rem txtファイルを一つずつ%%aに代入してループを回す for %%a in (*.txt) do ( rem %%aに代入されたファイル名をコマンドプロンプトに書き出す echo %%a ) |
のように記述して実行すると、前節の「dir」の場合と同じ結果が得られます。
4行目の「for」ループでtxtファイルを一つずつ%%aに代入してループを回しています。「for」コマンドに関する詳細な情報は、「for(繰り返し) -コマンド別解説-」をご覧下さい。
上記のバッチファイルはコマンドプロンプトに書き出すプログラムでしたが、ファイルに書き出す場合には、ファイルへ追記するコマンド「>>」を使用して、
1 2 3 4 5 6 7 8 9 10 |
@echo off rem 「file.list」ファイルが存在する場合には削除する if exist file.list del file.list rem txtファイルを一つずつ%%aに代入してループを回す for %%a in (*.txt) do ( rem %%aに代入されたファイル名をファイルに書き出す echo %%a >> file.list ) |
と書きます。
基本的には、一つ前のバッチファイルの「echo」コマンドに「>>」が付け足されただけですが、4行目に「file.list」ファイルが存在する場合には一度削除する操作を入れていることに注意して下さい。これがないと、前のファイルに付け足すことになってしまい、同名のファイルが既に存在する場合にはその内容の下にこのバッチファイルでの出力が追記されることになります。
また、「>」ではなく「>>」を使用していることにも注目です。「>」は上書き、「>>」は追記です。この場合は「>>」でなければいけません。詳しくは、「「>」と「>>」の違い -コラム-」を参照して下さい。
わざわざ「for」コマンドでファイル名一覧を取得する意味はあるのか?
「dir」コマンドと「for」コマンドを使った方法を紹介しましたが、単純にファイル一覧を取得したい場合であれば、「dir」コマンドを使用する方が簡単です。
しかし、時には取得しそのファイル名を少し編集して一覧にしたり、ファイル名を横に並べてみたりと、編集の自由度が大きいことが「for」コマンドを使う利点です。場合によって使い分けるようにしましょう。