指定したファイル名毎にフォルダを自動で作成して、同じファイル名を全て作成したフォルダへ移動する方法
こんにちは。thimiです。
今日は、指定したファイル名毎にフォルダを作成してファイルを移動する方法です。PC内の大量のファイルを整理する時に便利です。
まず、フォルダ毎に分けたいファイル名一覧を作成します。
今回は、以前ご紹介した下記の方法を使用しています。
”【初心者バッチファイル】ファイルリスト作成”
https://thimi-lifehack.com/create_filelist/
”【初心者バッチファイル】ファイル内 文字列抜き出し”
https://thimi-lifehack.com/extract_string/
”【初心者バッチファイル】ファイル内文字列並び替え(昇順ソート)”
https://thimi-lifehack.com/sort1/
”【初心者バッチファイル】同じ文字列の削除”
https://thimi-lifehack.com/delete_same_string/
全ファイル一覧名からフィル名の5文字まで同じファイル同士を分類するように、ファイル一覧を作成しました。
指定したファイル名のフォルダが無い場合は作り、ファイルを移動します。
バッチファイルを下記のように記載します。
delete_list.bat | |
---|---|
@echo off | コマンドプロンプトへ非表示 |
setlocal enabledelayedexpansion | for文の中で値を変更したいため、遅延環境変数を使うための宣言 |
rem 「mkdir_list」ファイルを1行ずつ読み込む | rem:コメント(覚書記載) |
for /f %%i in (mkdir_list.csv) do ( | for文でファイルに記載されている文字列を1行ずつ読み込む |
rem 読み込んだ名前でフォルダを作成 | rem:コメント(覚書記載) |
mkdir %%i | ファイルから読み込んだ文字列でフォルダ作成 |
rem 変数「foldername」にフォルダ名 | rem:コメント(覚書記載) |
set foldername=%%i | 変数にフォルダ名を保存 |
rem 「file_list.csv」ファイルの中から「foldername」と同じフォルダ名を探す | rem:コメント(覚書記載) |
for /f “tokens=* delims= eol=#” %%j in (‘findstr /r “^%1” file_list.csv’) do ( | ファイルから一行ずつファイルパスを読み込み、変数jに代入 |
echo %%j | find “!foldername!” >NUL | foldernameと同じ文字列が含まれるか確認 |
if not ERRORLEVEL 1 ( | 文字列が含まれていた場合 |
rem フォルダ名と同じ文字列のファイルを「 E:\Folder\!foldername!\」に移動 | rem:コメント(覚書記載) |
move %%j E:\Folder\!foldername!\ | 「E:\Folder\!foldername!\」以下にファイルを移動 |
) | |
) | |
) | |
endlocal | ローカル変数使用終了(省略可) |
exit | 終了処理(省略可) |
バッチファイルの内容を簡単に説明します。
「setlocal enabledelayedexpansion」コマンド
遅延環境変数のコマンドです。
値を実行するときに読み込むときに使います。設定した値を使うときは、
変数を「!」で囲みます。
「set」コマンド
実行中の環境変数の値を設定します。
「for」コマンド
ループ処理コマンドです。
オプションとして「/f」を追加することで、テキストファイル内の文章を
取り出して代入しています。
「tokens=」
ループ処理を行う時のトークンを指定します。アスタリスクを使うことで、「*」 以降の文字列を1つの文字列として取得します。
「delims=」
区切り文字のセットを指定します。
※デフォルトは、スペースとタブが設定されています。
「eol=」
行頭のコメント文字を1文字指定します。この文字から始まる行は無視します。
※デフォルトは、「;」(セミコロン)が設定されています。
1行毎読み込みたい場合は、各行に記載されていない文字を「delims」と「eol」に指定します。(今回は「#」を指定。)
「findstr」コマンド
指定した文字列をファイル内から検索します。
findstr [オプション] [指定文字列] [検索対象ファイル]
オプション
「/r」を指定することで、検索文字列にワイルドカードが使えます。また、特殊記号を使えるようになります。
指定文字列
「^」は、「行の始め」を意味します。
「%1」は、バッチファイルの第一引数を意味します。
「ERRORLEVEL」コマンド
実行結果としての戻り値は、「ERRORLEVEL」環境変数に保存されます
「ERRORLEVEL」をチェックすることで、直前のコマンドの実行結果の状態を確認出来ます。
「if」コマンド
条件文コマンドです。
ERRORLEVELが0は正常終了、ERRORLEVEL が1以上は異常終了となります。[if not ERRORLEVEL 1]により、1未満の場合は以下の処理を実行するという条件文です。
「move 」コマンド
ファイルやフォルダを移動します。
move [移動前ファイル(移動前フォルダ)] [移動後ファイル(移動後フォルダ)]
実行すると下記結果となります。
●実行前:test1/test2/test3のフォルダにファイル有り。
●実行後:新規でフォルダを作成し、test1/test2/test3内のファイルは移動。