【bat】サブディレクトリのファイルを全てカレントに移動(ついでにリネーム)する方法【コマンドプロンプト】

サブディレクトリのファイルを全てカレントに移動する方法

注意

以下では移動ついでリネームしています。

(ファイル名を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

これをベースに使いやすいように如何様にも料理できますね!