バッチファイル入門講義

入門講義【第15章】 いろんなフォルダからファイルを集める

本章ではいろいろなフォルダから複数の目的のファイルを集めてくるバッチファイルを作っていきます(下図のイメージ)。第15章 第15章の内容

その他の関連しそうな記事

 

ファイルを集めるバッチファイルを作る

これは「for」コマンドを使って実現できます。

以下のは、「メモ_1.txt」というファイルを探して「collection」フォルダにコピーしてくるプログラムです。「collect.bat」という名前のファイルに以下のコードを書き込み保存して下さい。

(※「\」は「\」に置き換えて下さい)

 

次に、以下の四つのフォルダを作ります。

folder1
folder2
folder3
collection

 

そして、それぞれのフォルダの下に、以下のようなファイルを作ります。

folder1
 ∟メモ_1.txt
folder2
 ∟メモ_2.txt
folder3
 ∟メモ_3.txt

 

コマンドプロンプトを開き、バッチファイル「collect.bat」を実行しましょう。

すると、「collection」フォルダに「メモ_1.txt」がコピーされました。

第15章 メモ_1.txtを見つけてコピーする

 

プログラムを詳しく見ていきます。

ここで、「dir」コマンドが初登場しました。「dir」は今いるフォルダにあるファイル名などを出力する、フォルダの情報を出力するコマンドです。

コマンドプロンプトで、

を実行してみてください。

なにやら色々表示されたと思います。

第15章 「dir」コマンドの実行

ここには、このフォルダ内の情報が書かれてあります。

一番右にの列にファイル名・フォルダ名が表示されており、1,2列目にはそのファイル・フォルダの更新日時が表示されています。

3列目には<DIR>もしくは何も書かれてありません。これは、ファイルかフォルダかを表しています。<DIR>がフォルダです。

 

もう少し情報を絞るために、「/b」オプションを付けてみましょう。

第15章 「dir」コマンドの「/b」オプション

このフォルダに存在するフォルダ名・ファイル名が表示されています。

「/b」オプションはファイル名またはディレクトリ名のみを表示するオプションです。また、「Commad Prompt.lnk」というのがありますが、これは今開いているコマンドプロンプトのことです。コマンドプロンプトもこのフォルダに存在しているので表示されています。

 

では、さらに、

とすると、このようにフォルダだけでなく、フォルダ内のファイルに対しても絶対パス形式でその場所が表示されます。「絶対パス」については、「絶対パスと相対パス -コラム-」をご覧ください。

第15章 「dir」コマンドの「/s」オプション

「/s」オプションは「サブフォルダに含まれるファイルやフォルダも全て表示する」というオプションです。「dir」コマンドについて、さらに詳しい情報は、「dir(フォルダとファイルの一覧を表示) -コマンド別解説-」で解説しています。

 

これに、ファイル名「メモ_1.txt」を指定して実行するとどうでしょう。

第15章 「dir」コマンドでファイルを指定

指定したファイル(ここでは、「メモ_1.txt」)の絶対パスが表示されます。今は、「collection」フォルダにも「メモ_1.txt」が入っているので、計二つのパスが表示されています。

 

ここまでの知識を元に、バッチファイル「collect.bat」に戻ると、

3行目「dir /b /s メモ_1.txt > list.txt」はメモ_1.txtの絶対パスを「list.txt」に書き出していることが分かります。「> ファイル名」は出力結果をファイルに上書きを意味します。

「>> ファイル名」は既に登場しましたが、こちらは追加記述するコマンドであり動作が違いますので区別するようにしましょう。詳しくは、(「>」と「>>」の違い -コラム-)で解説しています。

続いて、4行目では第9章で登場した「/f」オプションを使用した「for」コマンドを使っています。「/f」オプションは「in ( )」の括弧内に指定したファイルを一行ずつ読み取って「%%a」に入れ、「do ( )」の括弧内をループ処理するものでした。

「list.txt」から一行づつ読み取って(ここでは一行しかない)、「%%a」に代入しているので「%%a」には「メモ_1.txt」の絶対パスが入っているはずです。

そして6行目の「copy」コマンドで、「collection」フォルダへコピーしています。

 

複数のファイルを集める

一つのファイルだけではなく、複数のファイルを集めたいときにはどうしたらよいでしょうか?

例えば、ファイル名に「メモ_」と付いているファイルだけを集めたいときなどです。

そのときは、ワイルドカード「*」を使って、

とします。

「dir」コマンドのファイル指定を「メモ_*.txt」とし、この条件に当てはまる複数ファイルのパスを「list.txt」ファイルへ書き出します。すると、「for」によるループ処理が「list.txt」に書かれたすべてのファイルに対して行われるため、「メモ_」がついたファイルがすべてコピーされるのです。

 

上記のプログラムをバッチファイル「collects.bat」として実行し、実際に各フォルダ内の

メモ_1.txt
メモ_2.txt
メモ_3.txt

が集まるか確認しましょう。

第15章 メモ_*.txtを見つけてコピーする

 

ちなみに、上記のプログラムは以下のように省略して書くこともできます。

「for」コマンドの「in( )」の括弧内に直接「dir」コマンドを書いた形です。このときdir文をシングルクォーテーション「’」で囲むのを忘れないようにしましょう。(※ダブルクォーテーション「”」ではエラーになります。)

 

第15章のまとめ

本章では、特定のファイルを集めるバッチファイルを作成しました。

【入門講義 第15章のまとめ】

いろいろなフォルダから目的のファイルを集めることを学んだ

  • その1 「dir」コマンドで、探したいファイル名のリストを取得する
  • その2 「for」コマンドを使用してファイル名のループを行う

なにか不明な点やうまくいかない場合は、「お問い合わせフォーム」からお気軽にお問い合わせ下さい。

 

ここまで読んで下さった皆様へ

バッチファイル超入門講座も、最終章の第15回目の講義まで完了しました。お疲れ様でした。

超入門と言いながら、とっくに入門の域は脱しています。ここまで来ると今まで学んだコマンドの応用で大抵のものは作れるようになっているはずです。あとは、自分の作りたいバッチファイルを作りながら必要に応じて知識を学んでいけば、おのずとバッチファイルマスターになっていくでしょう。

ここまで、読んでくれた読者の皆様に感謝いたします。今後も「知識ゼロからのwindowsバッチファイル超入門」をよろしくお願いします。それでは、失礼いたします。

作って欲しいバッチファイル募集中!その他のお問い合わせもこちらからどうぞ

アイキャッチ画像 バッチファイル案の募集

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメント

  1. きりりん より:

    なんだかんだで最後まで読ませてもらいました。
    こういう記事は自分はもちろん、たくさんの人が必要としているものだと思うので、これからもかいていただけたらうれしいです。
    ありがとうございました!

  2. 石井 より:

    一通り習い終えました。
    これでバッチ関連の記事が理解できるといいなと思ってます。
    ありがとうございました。

  3. 匿名 より:

    一通り拝見致しました。この手のサイトで最後まで読めたのは初めてです。ありがとうございました。

  4. おお より:

    非常に勉強になりました!
    ありがとうございました!!

  5. こだぽん より:

    バッチは作れたら便利だけど、全然わからないと思っていました。
    一通り実際に試しながら、拝見させていただきました。
    とても勉強になりました。
    ありがとうございました。

コメントを残す