ファイル内容に特定の文字が含まれているファイルをコピーする
ファイルの内容を調べて、指定した単語が含まれているファイルだけを集める
ここでは、特定の単語から探しているファイルを見つけ出したり、関連しそうなファイルを収集してきたりするのに役立つパソコンの自動化を行っていきます。
「指定した文字がファイルに書いてあるファイルだけをリスト化しよう」でもファイル内に書いてある内容からリスト化することを判断しましたが、今回は指定した文字がファイル内に存在するものだけをコピーしてくるという操作を自動化しましょう。
・ファイル内容から行う操作を判断したい人
【ここでは、こんな自動化ができる!を動画で説明】
「自動化」という単語を含んでいるファイルだけを集めてくる
では、いつも通り作業フォルダから決定しましょう。私は以下の画像で示すフォルダ内で今回の作業を行っていきます。
みなさんも自由に作業フォルダを決めてくださいね。
では、ここに「Xに関連するファイルを収集.bat」という空ファイルを作りましょう。そして、その中に以下のプログラムコードを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
@echo off setlocal enabledelayedexpansion rem ユーザから検索したいワードを受け取る set /p moji="検索したいワードを入力してください:" rem ユーザから検索対象フォルダを受け取る set /p folder="検索対象フォルダを指定してください:" rem 検索したいワード名のフォルダが存在しない場合 if not exist %moji% mkdir %moji% rem フォルダを移動 cd %folder% rem 対象フォルダ内のファイル内容をチェックして指定単語が含まれているファイルをコピー for /r %%n in (*.*) do ( rem 指定単語をファイルから検索 findstr !moji! %%n > tmp.txt rem 指定単語が含まれている場合「tmp.txt」のサイズは0BTより大きくなる for %%i in (tmp.txt) do ( if not %%~zi equ 0 ( copy /y %%n %~dp0\%moji% ) ) del tmp.txt ) echo. echo "%moji%"を含むファイルをコピーしました。 pause endlocal |
これで、指定した単語が含まれているファイルだけを集めるプログラムは完成です。次はこのプログラムをテストする環境を作りましょう。
「Xに関連するファイルを収集.bat」と同じフォルダに、「対象フォルダ」というフォルダを作成します。この中に、「自動化を含んでいない①~③.txt」と「自動化を含んでいる①~③.txt」というファイルを作ります。以下の画像のような感じです。
また、この場所に「サブフォルダ」というフォルダも作り、その下にも同じようにテスト用のファイル群を作ります。
ここまでのファイル構造は、
∟自動化を含んでいない①
∟自動化を含んでいない②
∟自動化を含んでいない③
∟自動化を含んでいる①
∟自動化を含んでいる②
∟自動化を含んでいる③
∟サブフォルダ[フォルダ]
∟自動化を含んでいない①-111
∟自動化を含んでいない②-222
∟自動化を含んでいない③-333
∟自動化を含んでいる①-111
∟自動化を含んでいる②-222
∟自動化を含んでいる③-333
という感じです。ここで、「自動化を含んでいる~」というファイルはファイルの内容に「自動化」という単語が書かれているファイルであり、「自動化を含んでいない~」というファイルはファイルの内容に「自動化」という単語が書かれていないファイルです。
つまり、「自動化」を指定文字として、「Xに関連するファイルを収集.bat」でファイルを集めると、「自動化を含んでいる~」というファイルだけが集まるはずです。
では、プログラムを実行してみましょう。「Xに関連するファイルを収集.bat」をダブルクリックします。すると、黒いが画面が表れ、
・検索したいワード
・検索対象とするフォルダ
を聞いてきます。ここでは、それぞれ
・検索したいワード → 自動化
・検索対象とするフォルダ → 対象フォルダ
と入力しましょう。
最後にエンターを押しましょう。すると、「自動化」というフォルダができたと思います。
フォルダの中を覗きましょう。思い通りの結果が得られたようです。「自動化」という単語を内容に含むファイルだけが集まりました。
少しだけプログラムを解説
「Xに関連するファイルを収集.bat」に書き込んだプログラムの説明を少しだけしましょう。このプログラムはWindowsコマンドプロンプトというものです。もう一度表示しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
@echo off setlocal enabledelayedexpansion rem ユーザから検索したいワードを受け取る set /p moji="検索したいワードを入力してください:" rem ユーザから検索対象フォルダを受け取る set /p folder="検索対象フォルダを指定してください:" rem 検索したいワード名のフォルダが存在しない場合 if not exist %moji% mkdir %moji% rem フォルダを移動 cd %folder% rem 対象フォルダ内のファイル内容をチェックして指定単語が含まれているファイルをコピー for /r %%n in (*.*) do ( rem 指定単語をファイルから検索 findstr !moji! %%n > tmp.txt rem 指定単語が含まれている場合「tmp.txt」のサイズは0BTより大きくなる for %%i in (tmp.txt) do ( if not %%~zi equ 0 ( copy /y %%n %~dp0\%moji% ) ) del tmp.txt ) echo. echo "%moji%"を含むファイルをコピーしました。 pause endlocal |
6, 9行目ではユーザーから検索ワードおよび検索対象フォルダの情報を受け取っています。実行時に、黒い画面(コマンドプロンプト画面)で入力を要求されたのは、この部分のコマンドです。
12行目では指定した検索ワードと同名のフォルダが存在しない場合にフォルダを新規作成する部分です。ここで作成したフォルダ内に集めたファイル群が入るようになります。
少し飛ばして、18行目。ここは「for」というコマンドが使用されていますが、これはループ文と言って( )で囲んだ中のコマンドを繰り返しループしながら何度も実行するということを行っています。ここでは、19行目から30行目までのコマンドがループの対象となります。ループは対象フォルダに入っているファイル数だけ回り、そのファイル名は「%%n」に格納されています。
そして、20行目で指定したワードがファイル内に含まれているかどうかを判断し、含まれていれば「tmp.txt」へ情報を書き込みます。
23~27行目では「tmp.txt」のサイズを確認し、そのサイズが0KBでないときに、ファイルをコピーしています。「tmp.txt」のサイズが0ではないということは、指定ワードが含まれているということだからです。
おわりに
どうでしたでしょうか?プログラミングの経験がない方には少し難易度が高かったかもしれませんが、やっていることは実は単純なのです。
自分でプログラムが作れれば、いつでも自分の思った通りに作業を自動で行ってくれるパートナーを何人でも作り出すことができます。
しかも、普段我々が行っている作業はよく考える単純なものばかりです。このようなプログラムを作るのは難しくありません。本日ご紹介したプログラムも、まったくの初心者であっても一週間もあれば自分で一から作れるようになるでしょう。
ぜひ、パソコン作業自動化プログラミングを学んでみませんか?
自動化プログラムの作成を依頼しませんか?
幣サイトでは、Windowsパソコンの自動化プログラムの作成サービスを行っています。
本サービスの特徴は、
・安価な値段
・個人から法人までどなたでも対応
・お客様の要望を全力で実現
です。
安いからといって、決して手は抜きません。
まずは、下のボタンからWindowsパソコンの自動化プログラムの作成サービスの詳細をご確認ください。