ファイルの振り分けバッチ

指定した名称を持つファイルを指定先フォルダへ移動させるバッチファイルを作ってみました
以下のことができます

・バッチファイルへ、一つ、または複数のファイルをD&Dしてやると、あらかじめ設定しておいた任意のフォルダへ、ファイルを振り分ける
・ファイルの振り分け判定は、振り分け条件テキストに記載しておいた名称を含むファイルかどうかによって行う

ただし、D&Dするファイルの名称に全角スペースを持つ場合は、必ず半角スペースも織り交ぜてください

以下にバッチファイル名とその中身、及び簡単な解説を記述します


■filing_start.bat
---以下ソース
@echo off

start /MIN D:\AutoFiling\filing_roop.bat %*
---ここまでソース
・振り分けたいファイルはこのバッチファイルへD&Dしてください
・バッチ(コマンドプロンプト画面)を最小化起動するために、start /MINしています
・filling_roop.batは多数渡されたファイルを逐次処理するために設けたもので、%*としている通り、すべての引数を次のバッチへ渡しています
・バッチファイルパスは個々人の好きな場所にかえてください

■filing_roop.bat
---以下ソース
@echo off

for %%i in (%*) do (call "D:\AutoFiling\filing.bat" %%i)

EXIT
---ここまでソース
・多数渡されたファイルを1つずつ、filing.batへ渡し、振り分け処理をさせています
・call呼び出しなのはパラレルではなくシリアルに処理をさせたいためです
・バッチファイルパスは個々人の好きな場所にかえてください


■filing.bat
---以下ソース
@echo off

:: 読込テキスト
SET list_to=D:\AutoFiling\to.txt

:: ファイル振り分け先
SET FOLDER_to=F:\!To\

:: 振り分けるファイルの名称のみ取得
SET FILE_NAME=%~n1

:: 特殊文字列の置換
set FILE_NAME=%FILE_NAME:(=[%
set FILE_NAME=%FILE_NAME:)=]%
set FILE_NAME=%FILE_NAME: = %

:: フォルダへの振り分け
for /f "delims=" %%a in (%list_to%) do (
echo %FILE_NAME% | findstr /I /L /C:"%%a"
if not errorlevel 0 (goto LAST)
)

:TO
SET OUT_FOLDER=%FOLDER_to%
echo %OUT_FOLDER%
move %1 %OUT_FOLDER%

:LAST
---ここまでソース

・振り分け条件を、to.txt、というテキストファイルに書いています(後述

・パス、F:\!To\、に上記テキストファイル中の文字列に合致した名称のファイルを移動します

・振り分け判定されるファイルの名称に特殊文字を持っていると、その判定がうまくできません(findstr関数)。そのため、特殊文字、上記でいえば、(、を、[、へ置換して、その上で振り分け判定をさせています。今のところ上記の通り、(、)、全角スペースの3つだけを置き換えていますが、他にも置き換えが必要かもしれません。なお、この置換えはこのバッチファイル内での話であり、振り分け判定されるファイルの名称には影響ありません。
・ファイル振り分け先パスは個々人の好きな場所にかえてください
・to.txt、の名称は個々人の好きな場所と名称にかえてください(今は3つのバッチファイルと同じ場所にある想定です)


■to.txt
---以下テキストの中身(例)

日記

バックアップ

---ここまでテキスト
・これらの名称を持つファイルは、別フォルダ(前述ソースだとF:\!To\)へ移動させられます
・テキストファイル名称および、中身は自由に書き換えてください。テキストファイル名称を変えた場合はfiling.batの中身の該当箇所も同じ名称にしてください

とりあえず自分がしたいことはできてます
色々変えたいけどもういいや^^
バッチって文法がバラバラしてて凄く書きづらかった^^;

zeffiris-arffi's Ownd

Amebaに出戻り移行中です 良ければそちらご覧くださいね https://ameblo.jp/zeffiris-arffi

0コメント

  • 1000 / 1000