Ja nun musst du mir noch sagen, wohin damit ^^
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
Geändert von Unlimiter (04.04.2015 um 17:45 Uhr)
Warum so riesig?
Code:for /F %%i in ('Dir /B *.flv') do md "%%~ni"|move "%%i" "%%~ni"
Hast du deines schon mal ausprobiert Celv?
Es fängt schon damit an, dass bei der Annahme "Neues Video.flv" ein Ordner erstellt wird mit "Neues". Syrius Lösung war was den Punkt "eben schnell mal gemacht" angeht sogar die Sauberste.
Geändert von Unlimiter (04.04.2015 um 17:45 Uhr)
Wo wir von der Sauberkeit (betrifft auch Struktur) her bei Syrius wären und der Unterschied ansonsten bei "DIR" wäre. Übrigens könnten auch Bilder dabei sein? So würde die Festlegung der Extensions etwas kontraproduktiv sein. Trotzdem schön, dass dein Code es enthält. Immerhin kann The Don so dies auch bei Interesse nutzen und weiß was die Zeile bedeutet.
// Nebenbei werde ich heute einmal in den Schreibstreik treten. Meine Sätze und Gedankengänge sind auch nicht mehr so das Wahre.
//Edit: Eins noch:
Sämtliche Lösungen ignorieren immer noch die Fehler der Zeichen "&" und Co. welche nicht innerhalb des Ordnernames verwendet werden dürfen.
Geändert von Unlimiter (04.04.2015 um 17:56 Uhr)
Hast recht ist sauberer
Hatte meins auch nur schnell mal so hingeklatscht weil er mich im ICQ gefragt hat ob ich ihn was hinklatschen kann :O
Hab mal Syrius Version etwas abgeändert, da seine auch die Batch selber verschiebt. Hier wird nun nur noch verschoben, was The Don verschoben haben will.Code:for /f "Tokens=*" %%i IN ('Dir /B /S *.flv *.wmv *.mp4 *.mkv *.avi *.mpg *.mpeg *.mov *.ts *.m2ts *.rm *.rmvb *.ogm *.webm *.txt') do ( md "%%~ni" move "%%~i" "%%~ni" )
Da The Don die Batch so oder so im Selben Verzeichnis lagert, braucht er die Difinition für's Homedir auch nicht
Den Streik sollte ich mit meinem Kopf auch mal angehen^^
EDIT: Diese Lösung ignoriert die &-Zeichen nicht![]()
Geändert von Celv (04.04.2015 um 17:58 Uhr)