%~x1 で%1の拡張子のみ取得することが出来ます。
ただし拡張子が小文字か大文字かが不定なので、一工夫が必要です。
%ALP:a=A% とすると、環境変数ALPに含まれるaがAに変換されます。
%~z1 で%1のファイルサイズを取得することが出来ます。
条件分岐は既にお使いのif関数で出来ます。
ということで、戯れに作ってみました。
@Echo Off
Set BASE=C:\Documents and Settings\(ユーザー名)\デスクトップ
Echo 移動のベースは[%BASE%]です。
Echo.
:LOOP
If "%~1"=="" Goto ENDP
Set EXT=%~x1
If "%EXT%"=="" Goto doNothing
Set EXT=%EXT:j=J%
Set EXT=%EXT:p=P%
Set EXT=%EXT:g=G%
Set EXT=%EXT:b=B%
Set EXT=%EXT:m=M%
Set EXT=%EXT:n=N%
if %EXT%==.JPG Goto doJPG
if %EXT%==.BMP Goto doBMP
if %EXT%==.PNG Goto doPNG
REM 拡張子がいずれでもない時の動作
Set MOVED=%~n1\E
Goto doMOVE
:doNothing
REM 拡張子無し時の動作
Set MOVED=%~n1.d\F
Goto doMOVE
:doJPG
REM jpg時の動作
Set MOVED=%~n1\A
Goto doMOVE
:doBMP
REM bmp時の動作
Set MOVED=%~n1\B
Goto doMOVE
:doPNG
if %~z1 LEQ 2097152 Goto doSPNG
if %~z1 GTR 2097152 Goto doBPNG
:doSPNG
REM pngで2M以下の時の動作
Set MOVED=%~n1\C
Goto doMOVE
:doBPNG
REM pngで2Mより大きい時の動作
Set MOVED=%~n1\D
Goto doMOVE
:doMOVE
Echo [%~1]を[%MOVED%]に移動します。
Set MOVED="%BASE%\%MOVED%"
If Not EXIST %MOVED% Mkdir %MOVED%
Move "%~1" %MOVED%
Shift
Goto LOOP
:ENDP
Echo.
Echo 移動が完了しました。
Echo 何かキーを押して終了してください。
Pause>NUL
Exit /b 0
といった感じになります。
移動先を変える場合は「3行目のBASE=の後を変える」とか
「Set MOVED=%~n1\A みたいなとこを変える」です。
追加機能
・ディレクトリの自動作成
・拡張子が想定外の場合の追加(Eに移動)
・拡張子が無かった場合の追加(ファイル名.d\Fに移動)
お礼
ありがとうございました!