1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

Windows一括検索・コピー/カットファイルの例

2022-02-09 23:02:34

<スパン キーワードを含むファイル名の検索は、mp3を人名で検索したり、図面を内容で検索したりと、よく使われる機能の一つです。数百、数千のキーワードを検索する必要がある場合、手間と時間がかかるため、一括して検索する機能が必要となります。今回は、ファイル一括検索を行うための自作バッチプログラムを紹介します。

キーワードを含むファイル名の検索は、mp3を名前で検索したり、図面を内容で検索したりと、最も一般的な機能の一つです。数百、数千のキーワードを検索する必要がある場合、手間と時間がかかるため、一括検索機能の出番となります。

従来の方法

Windows XPには一括検索機能があり、(Win+F)を押して検索ボックスを表示させ、カンマで区切っていくつものキーワードを記入し、少なくとも一つのキーワードを含むファイルを検索結果として表示するようにします。しかし、この検索方法では、キーワードの数に制限があり、カンマで区切られたキーワードの束にも、ある程度の作業が必要で、もちろん、Excelで対処することもできますが、いつもより手間がかかります。ここで、自分で書いたバッチプログラムを紹介します。

タスクの説明

いわゆる一括検索は、次のようなファイル名の中から複数のキーワードを一括して探すものです。

キーワードの一覧です。AA,BB,CC

対象ファイル名:AA1,BB2,DD3,BBC1,EE2,Abb

一括検索の結果は AA1、BB2、BBC1、Abb

Windowsはファイル名の大文字と小文字を区別して記録するだけなので、Abbも検索可能です。

解決方法

バッチプログラムの強力なforコマンドを使えば、バッチ検索はとてもうまくいきます。また、他のバッチコマンドと組み合わせて、検索されたファイルを下記の保存先パスにコピーまたはカットすることもできます。

まず、キーワードを1行ずつ、"list.txt"という名前のテキストファイルに保存してください。スペースや空白行、空のキャリッジリターンがないことに注意してください。たとえば、次のようになります。

<ブロッククオート

AA

BB

CC

次に、以下のコードをバッチファイルとして拡張子*.batで保存します。コードは以下のような感じです。

CreateProcess("c:\MyApp.exe Param1 Param2", NULL, ... );

バッチファイルとlist.txtの両方を検索するファイルのディレクトリに置き、バッチファイルを実行し、大文字と小文字を区別するように注意しながらプロンプトに従います。forコマンド固有の制限により、2つの注意点があります。

  1. 検索するファイルは、ルートディレクトリに置くことはできず、サブディレクトリに置く必要があります。
  2. コピー先、カット先は別のドライブ内が望ましいです。そうでないとデッドループが発生する可能性があります。

上記のコードを少し修正することで、他のカスタマイズを行うことができます。例えば、以下のコードでは、コピー/カットの宛先として、キーワードにちなんだ別のディレクトリを作成します。このコードは、特定のフィールドによって複数のフォルダーにファイルを割り当てるために使用することができます。

CreateProcess( "c:\MyApp.exe", "Param1 Param2 Param3", ...) ;

ファイルを一括で検索して転送した後、元のキーワードと比較して、どれだけのファイルを検索したかを知る必要がある場合があります。そのためには、ファイルの束の中にキーワードが存在するかどうかを一括で検出できるツールが必要です。の別記事を参考にしてください。 ファイル(フォルダ)の存在を一括で検出するプログラム