サブディレクトリのファイルを全てカレントに移動する方法
注意
以下では移動ついでリネームしています。
(ファイル名をYYMMDD_HHMM.JPGに)
これは、将来的には過去のファイルを時系列で整理したいという個人的な理由からです。
ですので、単純にサブディレクトリのファイルを全てカレントに移動したいだけの場合は端折って考えていただければと思います。
環境
Windows10のbatを使います。
ソースコード
@echo off setlocal ENABLEDELAYEDEXPANSION set TODIR=%~dp0 set num=0 for /r "%TODIR%" %%i in (*.JPG) do ( rem ファイル名編集 set update=%%~ti set y=!update:~2,2! set m=!update:~5,2! set d=!update:~8,2! set h=!update:~11,2! set mi=!update:~14,2! set ymd_hm=!y!!m!!d!_!h!!mi! rem 現在ディレクトリで重複チェック set cur=%%~pi if EXIST !cur!!ymd_hm!.JPG ( set /a num+=1 set wk_name=!ymd_hm!_!num! ) else ( set wk_name=!ymd_hm! ) rem 移動先ファイル名の重複チェック if EXIST %TODIR%!wk_name!.JPG ( set /a num+=1 set new_name=!wk_name!_!num!.JPG ) else ( set new_name=!wk_name!.JPG ) rem カレントへ移動 ren %%i !new_name! move !cur!!new_name! %TODIR% ) pause
ファイル名をYYMMDD_HHMMにすると重複もありえるのでチェックし連番ふってます。
結果
なんということでしょう!
匠の手によってありがちな殺風景なディレクトリが、使いやすい空間へと生まれ変わりました。
Before
C:. │ bef.txt │ IMG_7049.JPG │ move.bat │ └─sub │ IMG_6918.JPG │ IMG_6919.JPG │ IMG_6922.JPG │ IMG_6923.JPG │ ├─201907 │ IMG_6282.JPG │ IMG_6582.JPG │ IMG_6583.JPG │ └─201911 IMG_6918.JPG IMG_6919.JPG IMG_6922.JPG IMG_6923.JPG
After
C:. │ 190713_1600.JPG │ 190812_1339.JPG │ 190812_1339_3.JPG │ 191102_1104.JPG │ 191102_1104_1.JPG │ 191102_1104_4.JPG │ 191102_1104_5.JPG │ 191102_1107.JPG │ 191102_1107_2.JPG │ 191102_1107_6.JPG │ 191102_1107_7.JPG │ 191208_0839.JPG │ bef.txt │ move.bat │ └─sub ├─201907 └─201911
これをベースに使いやすいように如何様にも料理できますね!