leerider
Goto Top

CMD Sortieren von Dateien nach Dateiendung

Hallo erstmal

Hab das Problem dass ich ein einem Ordner extremst viele Dateien habe, wobei ich diese Dateien nach der Dateiendung sortieren möchte.
Wobei es eine Ausnahme gibt weil zB. die Dateiendung .dwg und .bak in einen Ordner gehören.

Hab jetzt einiuge verusche gemacht und da mein CMD-Wissen nicht so weit entwickelt ist hab ich einige Probleme damit.

Hoffe jemand kann mir bei meinem Problem helfen...

Grüße Mark

Content-Key: 115555

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

Printed on: April 24, 2024 at 23:04 o'clock

Member: Leobuck64
Leobuck64 May 08, 2009 at 06:04:34 (UTC)
Goto Top
Hallo Mark,

ich versteh noch nicht ganz, was du vor hast.
Willst du die Dateien anschließend verschieben ?
Warum nimmst du nicht einfach den Explorer und sortierst nach Typ ?

Das geht nicht so recht aus deiner Frage hervor !

Gruß Leo
Member: maretz
maretz May 08, 2009 at 10:32:20 (UTC)
Goto Top
ein

dir /?

hätte geholfen...

dir /OE

gibt die Dateien nach Endung sortiert aus...
Member: leerider
leerider May 08, 2009 at 18:14:18 (UTC)
Goto Top
ja hallo... also das mim dir /OE hab ich eh schon versucht nur scheiter ich dann an dem auslesen der zeilen aus der txt-Datei weil die ersten Zeilen ja keine Dateien sind sondern nur die bezeichnung des Laufwerks usw.

und ja, ich möcht sie dann in ordner verschieben... dachte vll gehts einfacher als über das dir /OE

wenn DIR /OE funktioniert dann ist es eh ok, nur hab ich eben probleme mit dem auslesen aus der datei, wen mir da wer weiterhelfen kann glaub ich wär mir schon geholfen

Grüße Mark
Member: Biber
Biber May 08, 2009 at 21:12:59 (UTC)
Goto Top
Moin leerider,

wenn und falls Du die Strategie über DIR /OE und eine Zwischendatei gehen wolltest, dann nutze den DIR-Schalter /b wie /billich. Siehe DIR/? oder noch besser DIR /oe /b am CMD-Prompt.

Wenn Du dann ohnehin am CMD-Prompt bist, dann spiel mal ein bisschen mit dieser Strategie weiter:
[eingegebene Zeilen beginnen mit ">"]
>for %i in ("cmd" "zip" "pdf") do @echo if not exist .\%~iFiles md .\%~iFiles  
if not exist .\cmdFiles md .\cmdFiles
if not exist .\zipFiles md .\zipFiles
if not exist .\pdfFiles md .\pdfFiles

D:\temp>
>for %i in (*.cmd *.zip *.pdf) do @for /f "tokens=* delims=." %a in ("%~xi") do @echo move ".\%i" ".\%aFiles\"  
move ".\2echoes.cmd" ".\cmdFiles\"  
move ".\TestTimer.cmd" ".\cmdFiles\"  
move ".\DupsByExt.cmd" ".\cmdFiles\"  
move ".\CallelCmd1.cmd" ".\cmdFiles\"  
move ".\GetEnDeCfg.cmd" ".\cmdFiles\"  
move ".\GetEnDeCfgDaSilva.cmd" ".\cmdFiles\"  
move ".\fmtoutcsv.cmd" ".\cmdFiles\"  
move ".\ewc120.zip" ".\zipFiles\"  
move ".\produkey.zip" ".\zipFiles\"  
move ".\geProductKey.zip" ".\zipFiles\"  
move ".\shortcutkeys.zip" ".\zipFiles\"  
move ".\BrowseForFile.vbs.zip" ".\zipFiles\"  
move ".\datetime_examp.zip" ".\zipFiles\"  
move ".\getres.zip" ".\zipFiles\"  
move ".\getprn.zip" ".\zipFiles\"  
move ".\Netprotect_WinXP_SecurityGuide.pdf" ".\pdfFiles\"  
move ".\25_Jahre_Lagerhaus.pdf" ".\pdfFiles\"  

Ich habe jetzt mal im Beispiel nur die *.zip, *.cmd und *.pdf-Files im aktuellen Verzeichnis (".\") behandelt.

Aber Du solltest es sinngemäß auf Deinen Fall übertragen können.
Das "@Echo" dient nur zum Testen und Spielen -sollte das rauskommen, was du brauchst: "Echo" weglassen.

Grüße
Biber
Member: leerider
leerider May 09, 2009 at 12:18:15 (UTC)
Goto Top
ah ok, irgendwie versteh ich grad nur Streichelzoo, nicht mehr... =|

aber danke

das mit dem /B wie billig ist ja wirklich billig... =P und ichhab jetzt ein wenig damit rumgespielt und was gebastelt, nur leider überspringt das batch beim auslesen au der txt-Datei einige Dateien und ich weiß nicht warum... vll kann mir da ja noch wer helfen...

@Biber Danke für die Mühen aber ich versteh grad garnicht was du da gemacht hast und wenn ichs versuch funktioniert auch nicht wirklich...
@ echo off

dir /OE /B> Ausgabe.txt

FOR /F "skip=2 delims=" %%i IN (Ausgabe.txt) DO call :Sortieren "%%i"  

:Sortieren

echo Datei %~1 wird bearbeitet
set Dateiname=%~1

If %Dateiname%==Ausgabe.txt goto :eof

set Endung=%Dateiname:~-4,4%

echo %Dateiname%
echo %Endung%

MD %Endung%

pause

Es fehlt noch das verscheiben der Dateien aber das sollte dann kein Problem mehr darstellen... nur überspringt das batch bei der ordnererstellung einige Dateien und zwar nicht immer die selben, sondern jedesmal wenn ichs versuch andre bzw. mehr oder weniger... Warum macht es sowas? =(

Grüße Mark
Member: Biber
Biber May 09, 2009 at 13:43:49 (UTC)
Goto Top
Moin Mark,

okay, dann führen wir erstmal Deinen Ansatz weiter.

Ändere bitte in Deinem Schnipsel folgendes:
  • füge nach dem "@echo off" noch ein " & SetLocal" ein. Bedeutet: Alle Variablen, die Du mit SET deklarierst, gelten nur für Deinen Batch.
  • Schreibe die temporäre Datei Ausgabe nicht in das Verzeichnis, in dem Du Ordnung schaffen willst. Schreibe (und lese) die Datei im %temp%-Verzeichnis. [ Dir /oe /b >%temp%\Ausgabe.txt ... entsprechen %temp%\Ausgabe als Quelle in der FOR /F-Anweisung. Die IF-Abfragen fallen dadurch weg.
  • lass das "skip=2" weg.. wozu auch immer das sein sollte.
  • die Variable %Endung% ermittle nicht mit [set Endung=%Dateiname:~-4,4%], sondern als [%~x1] == als "Endung von Parameter 1".

-> neuer Durchlauf

Grüße
Biber
Member: leerider
leerider May 09, 2009 at 16:14:29 (UTC)
Goto Top
Was soll ich sagen... Funktioniert =)

Danke an alle

Spezielles Dankeschön an Biber ;)


eindeutig und schön gelöst...

Grüße Mark