symei3
Goto Top

Dateien in alphabetische Ordner sortieren

Hallo Forumsgemeinde,

leider habe ich sehr wenig Ahnung von Batchdateien etc.
Deswegen wird meine Frage vermutlich nur ein leises Schmunzeln erzeugen, aber ich habe im Netz nichts Ansprechendes gefunden und war von dem hier gezeigten Wissen sehr beeindruckt.
Mein Problem: Ich habe einen einzigen Ordner mit sehr vielen Dateien, die ich mittels einer Batch in vordefinierte Ordner (A bis Z) alphabetisch kopieren möchte.
Alle Dateien aus dem Quellordner mit dem Anfangsbuchstaben A sollen in den Zielordner 'A' kopert werden. Danach alle Dateien mit dem Anfangsbuchstaben B in den Ordner 'B' etc. bis 'Z'.
Da ich das häufiger machen muss, ist eine über den Explorer durchgeführte Kopierorgie überhaupt nicht lustig. face-smile

Für etwaige Lösungen wäre ich sehr dankbar.

Ciao
symei3

Content-ID: 294921

Url: https://administrator.de/contentid/294921

Ausgedruckt am: 05.12.2024 um 02:12 Uhr

114757
Lösung 114757 02.02.2016 aktualisiert um 22:43:33 Uhr
Goto Top
Moinsen,
gibt's zwar schon dutzende Threads zum selben Thema hier, aber ich gebs auf dauernd drauf hinzuweisen, bringt ja eh nichts ... also here you go:
@echo off & setlocal enabledelayedexpansion
set "quelle=c:\quelle"  
set "ziel=c:\ziel"  
for %%a in ("%quelle%\*") do (  
    set "name=%%~na"  
    set "target=%ziel%\!name:~0,1!"  
    if not exist "!target!" md "!target!"  
    copy "%%a" "!target!"  
)

Gruß jodel32
rubberman
Lösung rubberman 02.02.2016 aktualisiert um 22:43:34 Uhr
Goto Top
Hallo,

oder auch so (falls die Anfangsbuchstaben nicht unbedingt Großbuchstaben sind):
@echo off &setlocal
set ^"LF=^  

^"  Die Leerzeile oben ist kritisch - Nicht entfernen!  
for /f "delims=" %%i in ('dir /a-d /b') do if "%%i" neq "%~nx0" (  
  set "file=%%i"  
  set "first="  
  for /f skip^=1^ delims^=^ eol^= %%i in (
    '2^>^&1 cmd /von /c fc "!LF!!file:~,1!!LF!" nul'  
  ) do if not defined first set "first=%%i"  
  setlocal EnableDelayedExpansion
  if not exist "!first!\" md "!first!"  
  copy /y "!file!" "!first!\"  
  endlocal
)
Die Batchdatei kann im Verzeichnis mit deinen Dateien liegen, ohne selbst kopiert zu werden.

Grüße
rubberman
symei3
symei3 02.02.2016 um 18:37:28 Uhr
Goto Top
THX für deine Bemühungen!!
Ich habe die Suchfunktion nochmals benutzt, aber nichts gefunden, was meinem Problem entspräche.

Leider funktioniert diese Lösung bei mir nicht, es wird nichts kopiert:

@echo off & setlocal enabledelayedexpansion
set "quelle=f:\1-21\ein-ordner"
set "ziel=f:\1-21\2016"
for %%a in ("%quelle%") do (
set "name=%%~na"
set "target=%ziel%\!name:~0,1!"
if not exist "!target!" md "!target!"
copy "%%a" "!target!"
)

Irgendetwas muss ich offensichtlich falsch machen.
Ciao
symei3
symei3
symei3 02.02.2016 um 18:47:22 Uhr
Goto Top
THX!
Die Anfangsbuchstaben der Dateien aus dem Quellordner sind fast alle in Großbuchstaben.
Ciao
symei3
rubberman
Lösung rubberman 02.02.2016 aktualisiert um 22:43:38 Uhr
Goto Top
Macht ja nix face-wink
Wenn du die Batchdatei nicht im Quellverzeichnis haben willst, dann so:
@echo off &setlocal
set "quelle=f:\1-21\ein-ordner"  
set "ziel=f:\1-21\2016"  
set ^"LF=^  

^"  Die Leerzeile oben ist kritisch - Nicht entfernen!  
for /f "delims=" %%i in ('dir /a-d /b "%quelle%"') do (  
  set "file=%%i"  
  set "first="  
  for /f skip^=1^ delims^=^ eol^= %%i in (
    '2^>^&1 cmd /von /c fc "!LF!!file:~,1!!LF!" nul'  
  ) do if not defined first set "first=%%i"  
  setlocal EnableDelayedExpansion
  if not exist "!ziel!\!first!\" md "!ziel!\!first!"  
  copy /y "!quelle!\!file!" "!ziel!\!first!\"  
  endlocal
)
Grüße
rubberman
symei3
symei3 02.02.2016 um 19:07:15 Uhr
Goto Top
Nochmals ein dickes THX!!!

Das Script tut genau das, was ich mir erhoffte.
Damit wird mir künftig eine Menge Arbeit abgenommen!!
Weiter so! face-smile

Ciao
symei3
114757
Lösung 114757 02.02.2016 aktualisiert um 22:43:44 Uhr
Goto Top
Zitat von @symei3:
Leider funktioniert diese Lösung bei mir nicht, es wird nichts kopiert:
kleiner Typo ist oben korrigiert face-wink sorry, läuft ...

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen.

Gruß jodel32
symei3
symei3 02.02.2016 um 21:08:12 Uhr
Goto Top
Hab ich mir schon gedacht. face-smile
Vielen Dank für deine Geduld!! Werde dein Script jetzt auch noch probieren.
Das Script von rubbermann läuft wie Schmitz' Katze!!! face-smile

Ich hätte an euch beiden nur noch eine kleine Frage:
Bei Sonderzeichen (z.B. Álvarez, Çelik, Österreich) werden neue Ordner erstellt, was mich nicht sonderlich stört, da ich diese Ausnahmefälle per Hand einsortieren kann.
Oder ist es ohne großen Aufwand möglich, auch diese Option mit einzubauen, d.h., Álvarez unter A - Çelik unter C etc.?

Ciao
symei3
rubberman
Lösung rubberman 02.02.2016 aktualisiert um 22:43:45 Uhr
Goto Top
Nicht ohne größeren Aufwand, das sind einfach andere Zeichen. Kannst du genau spezifizieren, welche dieser Zeichen so alles auftreten könnten (außer deutsche Umlaute)? Alles wird nicht gehen. Sobald ein Zeichen mehr als ein Byte benötigt, ist Ebbe mit Batch.

Grüße
rubberman
symei3
symei3 02.02.2016 um 22:43:04 Uhr
Goto Top
Ich bin euch beiden für die mir erteilten Ratschläge restlos dankbar!
Bitte macht euch über die Sonderzeichen keinen Kopf!!!
Ich bin nur so begeistert, dass ich mich zu dieser ausgefallenen Frage habe hinreißen lassen.
Es ist alles gut.
Ciao
symei3