@echo off
rem rekursiver Aufruf? (1.Parameter == /R)
if %1.==/R. goto rekursiv
rem ein Prameter vorhanden?
if %1.==. goto no_params
set src=%1
:param_
rem erster Prameter sollte der Ordner sein, wo's abgeht
if not exist %src%\* goto err_param
rem und nun für jede Datei innerhalb des Quellordners ...
rem dabei ist:
rem '%%i' die "For"-Variable
rem '%0' ist das script selbst
rem 1 '/R' die Markierung für den rekursiven Aufruf
rem 2 '%src%' der Quellordner
rem 3 '%%~fi' Laufwerk+Pfad+Name+Erweiterung der Datei
rem 4 '%%~dpsi' Laufwerk+Pfad+Name+Erweiterung als '8.3'
for %%i in (%src%\*.*) do call %0 /R "%src%" "%%~fi" %%~si
goto end_batch
rem --------------------------------------------------
:rekursiv
rem bin ich's selbst??? Ooops!
if %3.==%0. goto exit_batch
rem check %3 (Datei)
if not exist %3 goto err_R_Datei
rem "falschen" Ordner erstellen ...
if exist %4__\* goto err_R_Dummy
md %4__
rem ... Datei verschieben ...
move %3 %4__ >Nul
rem ... und "falschen" Ordner korrigieren...
move %4__ %3
goto exit_batch
rem --------------------------------------------------
:no_params
echo.
echo. kein Ordner angegeben...
echo. verwende aktuellen Ordner
set src=.
rem ... und Rücksprung
goto param_
rem echo. [Abbruch]
rem echo.
rem goto end_batch
:err_param
echo.
echo. Ordner "%1" scheint nicht zu existieren, kein Zugriff oder nix drin!
echo. [Abbruch]
echo.
goto end_batch
:err_R_Datei
echo. Kein Zugriff auf oder Datei "%3" existiert nicht!
echo. [skip...]
goto exit_batch
:err_R_Dummy
echo. Dummer Zufall...
echo. Dummy-Ordner "%4__" existiert bereits!
echo. [skip...]
goto exit_batch
rem --------------------------------------------------
:end_batch
rem falls noch irgendetwas zu sagen ist...
pause
:exit_batch