Ich würde es so machen:
** Hatte sich ein Fehler reingeschlichen. ** Zwar war der Name des Ordners korrekt, aber Dateien mit selben Namen wurden in Subfolder verschoben.
- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -
Auch mit Leerzeichen im Namen (Quotes und so) - Läuft richtig
Code:@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 for %%c in (%3) do ( if not exist "%%~dc%%~pnc" mkdir "%%~dc%%~pnc" move %3 "%%~dc%%~pnc" ) 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




Zitieren