Unterordner auf Basis eines Teils des Dateinamens erstellen - Dateien da rein verschieben

Mitglied: IchoTolot2

IchoTolot2 (Level 1) - Jetzt verbinden

21.07.2006, aktualisiert 15.11.2006, 11006 Aufrufe, 33 Kommentare

Hilfsfunktion zum Dateien sortieren

Hallo Leute,

ich habe folgendes Problem:
einen (na gut mehrere) Ordner mit (je) mehr als 10.000 Dateien drin.

Ich möchte eigentlich per Script (oder wenn es das gibt per Programm mit DAU-tauglicher-GUI für kleine Icho's) anhand der Dateinamen Ordner erstellen und die Dateien in diese Ordner verschieben.
Wichtig dabei wäre, dass die Anzahl der zu berücksichtigenden Zeichen festzulegen ist. im Beispiel X
Wünschenswert wäre noch eine Variable für die Anzahl der mindest vorhandenen Dateien (allerdings fürchte ich, das dadurch das Script für mich endgültig zu hoch werden würde) im Beispiel y

ein Beispiel
folgende Dateien:
000.jpg
abcs.jpg
gate1111.avi
gate1112.avi
gate1113.avi
pic000.jpg
pic1.jpg
pic237.jpg
picturegrabb.jpg
einfache Variante:
wenn ich eine Befehl mit der Variablen X=3 absetze sollte die Kiste mir folgende Ordner erstellen:
000
abc
gat
pic

und jeweils die Dateien in den Ordner verschieben.
geniale Variante:
wenn ich eine Befehl mit der Variablen X=3 und y=3 absetze sollte die Kiste mir folgende Ordner erstellen:

gat
pic

und jeweils die Dateien gat* und pic* in den Ordner verschieben.

Ich hoffe ich habe meine Wunschtraum einigermaßen verständlich rüber gebracht. Wäre Super wenn ich ein paar Tips für Lösungsansätze bekomme.

System ist übrigens Windows XP.

So jetzt gehe ich mal schlafen
Nice Day

Icho Tolot
33 Antworten
Mitglied: Biber
21.07.2006 um 11:00 Uhr
Moin Langschläfer, ;-) face-wink

kurze Skizze:

HTH Biber
Bitte warten ..
Mitglied: IchoTolot2
21.07.2006 um 12:06 Uhr
Hi Biber,

erstmal vielen Dank für die Super schnelle und gute Antwort.
Bin echt erstaunt was mit Batch alles geht, wenn man weiß was man tut.

So habe ich das Teil zum Laufen gebracht
Schmeißt zwar massen an Fehlermeldungen aber es geht.
Deine Variante wollte irgendwie nicht mit Dateien die Leerzeichen enthalten zusammenarbeiten.

Für die geniale Variante werde ich vermutlich nicht an einem WSH-Script o.ä. vorbei kommen.

Liebe Grüße und Nice Day
Icho Tolot
Bitte warten ..
Mitglied: Biber
21.07.2006 um 12:39 Uhr
Moin Icho Tolot,

Schmeißt zwar massen an Fehlermeldungen aber es geht.
Ja und? Erwartete Fehler lassen sich doch abfangen. Egal ob Batch oder WSH oder C#.

Deine Variante wollte irgendwie nicht mit Dateien die Leerzeichen enthalten zusammenarbeiten.
Das halte ich für ein lösbares Problem.
Bei mir bekomme ich das weg ..

...durch die Änderung der For-Schleifen-Parameter in:
...
For /f "tokens=1* delims=" %%i in ('dir /A:-d /b "%1"') do (
...
Und die Meldung "Datei nicht gefunden" beim DIR-Befehle lässt sich mit "2>nul" entsorgen.

Du wolltest doch nur einen Denkanstoss, kein schlüsselfertiges Produktiv-Programm. ;-) face-wink


Für die geniale Variante werde ich vermutlich nicht an einem WSH-Script o.ä. vorbei kommen.
Na, dann lese ich mal gespannt weiter mit.
Bitte warten ..
Mitglied: IchoTolot2
22.07.2006 um 01:01 Uhr
so, ich habe jetzt mal die einfache Variante einigermaßen als VBScript hin bekommen.

hier das Ergebnis:


An der genialen Variante grübel ich derzeit noch ohne große Ideen

Gute Nacht

Icho Tolot
Bitte warten ..
Mitglied: IchoTolot2
23.07.2006 um 12:39 Uhr
Guten Morgen,

die geniale Variante habe ich jetzt auch zum Laufen gebracht.

Falls es jemand nachbauen will:

1. Schritt: Aus dem Dateilistenarray ein Array mit den Pfadnamen generieren


2. Schritt: Die Anzahl der gleichen Pfade zählen


3. Schritt: Wenn die Anzahl der Dateien >= der Mindestanzahl sind ein Verzeichnis anlegen


4. Schritt: Dateien verschieben wenn das zugehörige Unterverzeichnis existiert


Problem: Keine Dateifilter


Das Einzige wofür ich noch keine Lösung gefunden habe ist eine Möglichkeit der Dateifilterung wie *.avi, p*.jpg oder ähnliches.
Gibt es da Möglichkeiten und wenn ja wie schauen die aus?



Vielen Dank für die Hilfe
Icho Tolot
Bitte warten ..
Mitglied: Biber
20.08.2006 um 16:17 Uhr
Moin Icho Talot,

vielen Dank für das Posten der genialen Varianten.
Hast Du denn das letzte Teilproblem inzwischen auch gefixt?
Oder wartest Du noch auf Antworten?

If so, dann poste doch mal bitte Deinen Code-Schnipsel ein bloc ...ist sonst etwas mühsam, sich das zusammenzustoppeln.
(jedenfalls für ältere Biber wie mich ;-) face-wink )

Wenn Frage erledigt sein sollte, dann setze bitte den Beitrag auf gelöst.

Oder, noch eine "geniale Variante" mehr - wir fixen den Rest auch noch und stufen es um als Tutorial.

Gruß
Biber
Bitte warten ..
Mitglied: IchoTolot2
28.08.2006 um 17:22 Uhr
Hallo Biber und Rest der Welt,
hier erstmal der Code in Block inkl. dem HTML-Logfile:

Das Problem mit dem Dateifilter ist noch nicht gelöst.

Am Code wären noch einige Schönheitsoperationen (ein statt mehrere Arrays u.ä.) notwendig, aber setze ich mich auseinander wenn es mal Komplett läuft.

So genug Text für heute (ich habe ja den ganzen Code abgetippt ;-) face-wink ).

Nice Day
IchoTolot
Bitte warten ..
Mitglied: n4426
10.09.2006 um 17:46 Uhr
Hi Biber,

ist es möglich das script von Dir so zu ändern, das es die Länge des Namens des Ordners nicht aus einer festen Zeichenzahl (z.B. 5) sondern aus einem Trennzeichen (z.B. "-" )?

oder geht das mit dem Script nicht so einfach?

mfg
andi
Bitte warten ..
Mitglied: Biber
11.09.2006 um 00:07 Uhr
Moin n4426,

ließe sich natürlich auch machen... wenn es für so etwas Anforderungen gibt?

Angenommen ich hätte meine Datei z.B. jahrweise nach dem Muster 2005-bla.* und 2006-blubb.* benannt, dann könnte ich die in Unterverzeichnisse 2005 und 2006 sortieren wollen.

Skizze:

Test am CMD-Prompt:

...falls ich Dich richtig verstanden habe.
Sonst musst Du mal ein genaueres Beispiel posten.

Gruß
Biber
[Edit]
P.S. Ich habe das jetzt nicht getestet bzw. angepasst für "Dateinamen mit Leerzeichen.xyz". Würde sicher noch nicht funktionieren.
P.P.S. Und auch die Anweisung For /L %%a in (1,1,%maxlen%) do könnte noch angepasst werden, weil es ja vielleicht nicht sinnvoll ist, ab Zeichen 1 zu suchen nach dem Trennzeichen. Falls ich meine Dateien mit "YYYY-MM-TTdateiname.xyz" sortieren will in Monats-Ordner z.B "2005-07" etc., dann würde ich die Anweisung ändern auf For /L %%a in (5,1,%maxlen%) do... oder die "AbStartPos" auch als Parameter übergeben.
[/Edit]
Bitte warten ..
Mitglied: n4426
12.09.2006 um 16:06 Uhr
Hi Biber,

erstmal Danke, ich habs aber leider nich zum laufen bekommen.

Also, ich möchte folgendes machen.

Ich hab ein Verzeichniss, wo mp3-Datein abgelegt sind. Diese liegen zurzeit alle in einem Ordner.

Interpret - Titel.mp3
Interpret - Titel2.mp3
Interpret2 - Titel3.mp3
Interpret3 - Titel4.mp3
Interpret3 - Titel5.mp3
...

um jetzt schneller die Titel zu finden, möchte ich die Dateien je nach Interpreten in unterverzeichnisse verschieben.

Interpret
.. Interpret - Titel.mp3
.. Interpret - Titel2.mp3
Interpret2
.. Interpret2 - Titel3.mp3
Interpret3
.. Interpret3 - Titel4.mp3
.. Interpret3 - Titel5.mp3

kannst du mir dabei helfen (alle Ordner per Hand erstellen und die Dateinen verschieben ist ja ein ewigkeitswerk).

mfg
andi
Bitte warten ..
Mitglied: Biber
12.09.2006 um 16:47 Uhr
Moin andi,

dafür brauchst Du keinen Batch, das ist nur eine Zeile.
Wenn das so stimmt:
Ich hab ein Verzeichniss, wo mp3-Datein abgelegt sind. Diese liegen zurzeit alle in einem Ordner.

Und wenn alle Dateien vor dem ersten Bindestrich den Interpreten stehen haben.

Beispiel (habe mir ein Spielverzeichnis "F:\mpgs" angelegt)

Streiche das @echo vor dem XCopy-Befehl und ändere Quellverzeichnis (="f:\mpgs") und Ziel ("f:\NewRoot") und schieß die Zeile ab.
Und falls Du die Dateien nicht kopieren, sondern de facto verschieben willst, dann häng noch ein [ && del "%i"] dran.

[Natürlich auch hier beide "@echo"s rauslöschen, wenn es getestet ist.

Gruß
Biber
erstmal Danke, ich habs aber leider nich zum laufen bekommen.
Das liegt sicherlich an der "set maxlen=8" in meinem Batch oben und vor allem an den Leerzeichen in Deinen *.mp3s.
Aber wäre dafür sowieso die falsche Strategie gewesen.
Bitte warten ..
Mitglied: n4426
12.09.2006 um 19:29 Uhr
Danke Biber,

funktioniert prima.

Hat zwar ein bisschen gedauchert, bis ich draufgekommen bin, das man das ganze in Eingebeauforderung eingeben muss und nicht als CMD-Datei laufen lassen kann.
Bitte warten ..
Mitglied: Biber
12.09.2006 um 20:43 Uhr
@n4426
...na, ich hab doch gesagt, dass es nicht nicht lohnt, für eine Zeile einen Batch zu schreiben... ;-) face-wink

Aber sicherheitshalber nochmal beiden Varianten:
Zum Testen am CMD-Prompt eintippen:

wobei f:\mpgs das Verzeichnis mit den Quelldateien ist----------> von denen werden nur die mit den Namen "*-*.mp3" angefasst!
und f:\NewRoot das Verzeichnis ist, unterhalb dem diese neue Struktur mit "InterpretX" aufgebaut werden soll.

Auch wenn ich mich wiederholen sollte: in Deinem konkreten Fall reicht das einmalige Abfeuern vom Prompt aus :-D face-big-smile

Falls jemand meint, es wäre als Batch erhaltenswert, weil man/frau es ja öfters brauchen könnte, dann
als Batch-Version mit zwei Parametern Quellverzeichnis und Zielverzeichnis-Root...

Beide Varianten machen nur ein "echo" von dem, was eigentlich abgehen soll.
Wer es verstanden und "trocken" zum Laufen gebracht hat in der eigenen Umgebung, der muss jeweils das Wort "echo" bzw. "@echo" löschen.

So, nach diesem kurzen Exkurs möchte ich aber noch auf das auch noch offene Problem von Icho Tolot hinweisen... siehe etwas tiefer im Thread.
Kurzgefasst: wie kann ich unaufwändig FileMasks und Patterns in einer VBS-Datei-Auswahl implementieren?
Gab es da nicht auch ein RegExp-Object bei M$? Das riecht doch nach Regular Expressions.. keiner hier, der programmieren kann?

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
25.09.2006 um 11:53 Uhr
Hallo,

ich hoffe Ihr könnt mir weiterhelfen.
Habe mir das alles bereits durchgelesen aber komme trotzdem nicht weiter.

Ich benötige eine bat- bzw. cmd-Datei welche folgendes Problem löst:

Habe einen Ordner Rechnungen mit ca. 25000 Dateien diese sind durchnummeriert (00000-25000).
Einige Nummern sind nicht vorhanden andere mehrfach (z.B. 00009.tif 00009.xls 00009.doc .....)
Einige Ordner wurden auch bereits manuell angelegt und enthalten auch bereits Dateien.

Jetzt soll das Programm den Ordner Rechnungen nach Dateien durchsuchen
und falls Ordner noch nicht vorhanden diesen erstellen und Dateien in Ordner verschieben.
Falls Ordner bereits vorhanden entsprechend nur Dateien verschieben.

Gruss
Herby

Noch ein Nachtrag damit Ihr ungefähr seht wieviel Ahnung ich habe :-) face-smile

Mein bisheriger Versuch:

REM @echo off
set zaehler=0
set stellen=1
:sprungmarke
if "%stellen%"=="1" md C:\Rechnungen\0000%zaehler%
if "%stellen%"=="2" md C:\Rechnungen\000%zaehler%
if "%stellen%"=="3" md C:\Rechnungen\00%zaehler%
set /A zaehler = %zaehler% + 1
if "%zaehler%"=="10" set /A stellen = %stellen%+1
if "%zaehler%"=="100" set /A stellen = %stellen%+1
if not "%zaehler%"=="1000" goto sprungmarke
if "%zaehler%"=="1000" goto ende
:ende

Ziemlich armselig :-( face-sad(((((((((
Bitte warten ..
Mitglied: Biber
25.09.2006 um 21:03 Uhr
Moin, herby_z,

Habe einen Ordner Rechnungen mit ca. 25000 Dateien diese sind durchnummeriert (00000-25000).
Einige Nummern sind nicht vorhanden andere mehrfach (z.B. 00009.tif 00009.xls 00009.doc .....)

Also, wenn ich da einen Vorschlag machen darf.. *kopfschüttel*
Wenn Du diese Dateien schon "strukturiert" verschieben willst (was ich durchaus für angebracht halte),
dann würde ich nicht statt der bisherigen 25000 Dateien in einem Ordner jetzt anstreben, einen Orner mit 20000 Unterverzeichnissen anzulegen.

Wenn schon, dann würde ich;
- alle Rechnungsdateien von 00000 bis 00999 in einen Unterordner 00xxx packen
- darunter dann noch eine Ebene für jeweils 100 Rechnungsnummern
...so dass die Struktur am Ende so aussieht:
[\Rechnungen\]
[\Rechnungen\00xxx]
[\Rechnungen\01xxx]
[\Rechnungen\02xxx]
[\Rechnungen\03xxx]
[\Rechnungen\03xxx\030yy]
[\Rechnungen\03xxx\031yy]
[\Rechnungen\03xxx\032yy] ---> und in so einem Ordner wären alle Dateien 03200.doc bis 03299.tif
....
.................
....
[\Rechnungen\25xxx]

Diese Art von stupider Arbeit würde der folgende Zweizeiler gerne für Dich erledigen:
[ACHTUNG: Source-Ordner %src% angenommen als "x:\Archiv" und Zielordner %target% als F:\rechnungen. ANPASSEN!!]
Output wäre..

Wenn Du es lieber in 20000 Einzelverzeichnisse haben willst->auch kein Thema, aber nur auf ausdrücklichen Wunsch und widerwillig.

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
26.09.2006 um 08:12 Uhr
Morgen Biber,

leider brauche ich es in Einzelordner, das hat folgenden Grund:
Diese Rechnungen werden über ein anderes Programm (ERP-System) aufgerufen.

Früher war es nur möglich zu einer Rechnungsnummer eine Datei abzulegen welche im Ordner Rechnungen lag bzw. liegt.

Jetzt kann ich auf Ordner umstellen und in diesen Ordnern mehrere Dateien ablegen welche auch nicht unbedingt die Rechnungsnummer haben müssen.

Ein bischen verwirrend, aber es ist nun mal so.

Auf alle Fälle vielen Dank für die Hilfe werde ich gleich mal testen.

Gruss
Herby
Bitte warten ..
Mitglied: Biber
26.09.2006 um 08:18 Uhr
Na, Herby,
wenn es denn in diese flache Struktur muss, dann wäre es (ungetestet) sinngemäß noch kürzer:

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
26.09.2006 um 09:02 Uhr
::----snipp MoveIntoRechNo.bat
@echo off & setlocal enableDelayedExpansion & set "target=C:\rechnungen" & set "src=C:\Archiv"
For /l %%i in (100000,1,125000) do set "fn=%%i" && if exist "%src\!Fn:~-5!.*" (
if not exist "%target%\!Fn:~1,5!" md %target%\!Fn:~1,5!
move "%src%\!Fn:~-5!.* %target%\!Fn:~1,5!\ >nul && echo Gemoved: %target%\!Fn:~1,5!\!Fn:~-5!.*
)


habe das Programme jetzt so abgewandelt das target und source auf C:\ liegen.
Im Ordner C:\rechnungen habe ich eine Datei 13000.txt angelegt.
Leider macht das Programme überhaupt nichts.

Ich verstehe die Batchdatei auch nicht.
Vermute die erste Zeile ist Kommentar, echo off kenn ich auch noch, aber dann siehts ziemlich düster aus.

P.S. Habe WinXP prof. und oben angegebenen Code als Biber.bat gespeichert.
Bitte warten ..
Mitglied: Biber
26.09.2006 um 09:26 Uhr
Im Ordner C:\rechnungen habe ich eine Datei 13000.txt angelegt.
Und wenn Du die mal in den Source-Ordner (da, wo für den Batch die Dateien JETZT liegen sollen) verschiebst?

Wenn Du nachvollziehen willst, was der Batch tut, dann
- ändere die 2. Zeile
ECHO if not exist "%target%\!Fn:~1,5!" md %target%\!Fn:~1,5!
und setze "REM " vor die dritte Zeile.
Dann wird es klarer (denke ich).

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
26.09.2006 um 09:54 Uhr
Könntest Du mir noch die Funktion von !FN:~1,5! und !Fn:~-5! erklären,
ich meine was macht das ! oder ~ ?
Das wandelt doch irgendwie die letzten 5Zeichen um oder so.

Ich glaube das genau hier mein Fehler begraben ist.
Es funktioniert bis do set "Fn=%%i" das wird mir auch angezeigt,
Ordner anlegen und verschieben funktioniert nicht.

Nerv ich schon :-( face-sad((
Bitte warten ..
Mitglied: Biber
26.09.2006 um 13:27 Uhr
Du mir noch die Funktion von !FN:~1,5! und !Fn:~-5! erklären

ja, klar.
in der Variablen %Fn% (für %filename% sollte ja , dur die FOR/L..IN..DO-Anweisung stehen:
100000
100001
100002
....
125000

Von dieser in der gleichen Zeile gefüllten Variablen will ich sofort/vom aktualisierten Wert, die letzten 5 Zeichen.
Das würde man/frau im Batch eigentlich so schreiben
%fn:~-5% (die letzten 5 Zeichen von %fn% --->die letzten 5 Zeichen von "100000" -->"00000"
%fn:~-5% (die letzten 5 Zeichen von %fn% --->die letzten 5 Zeichen von "100001" -->"00001"
%fn:~-5% (die letzten 5 Zeichen von %fn% --->die letzten 5 Zeichen von "100002" -->"00002"
.. etc.
Da ich aber den Wert der aktualisierten Variablen %fn% brauche, muss ich schreiben:
!fn:~-5! (die letzten 5 Zeichen von der in der selben Zeile geänderten %fn%
-bzw.
!fn:~-1,5! (die Zeichen ab Pos 1 in Länge 5 von der in derselben Zeile geänderten %fn%
[wobei Pos 0 das erste zeichen ist, Pos 1 das zweite Zeichen usw.

Wenn es bei Dir nicht klappt:
->dumme Frage: Du hast aber schon ein halbwegs aktuelles Windows? Win2k, WinXP oder so?
Bei Win98 gibt es die Syntax noch nicht.
-> oder gehörst Du zu den 2% der Windows-User, die aus Versehen "Extensions Enabled" haben?

Dann probier mal zusätzlich (oder als neue 1. Zeile im Bätschelchen)
Setlocal EnableExtensions

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
26.09.2006 um 13:58 Uhr
Hey Biber,

habe den Fehler endlich gefunden !!!!!

::----snipp MoveIntoRechNo.bat
@echo off & setlocal enableDelayedExpansion & set "target=C:\rechnungen" & set "src=C:\Archiv"
For /l %%i in (100000,1,125000) do set "fn=%%i" && if exist "%src\!Fn:~-5!.*" (
if not exist "%target%\!Fn:~1,5!" md %target%\!Fn:~1,5!
move "%src%\!Fn:~-5!.* %target%\!Fn:~1,5!\ >nul && echo Gemoved: %target%\!Fn:~1,5!\!Fn:~-5!.*
)


if exist "%src%\!Fn:~-5!.*" ( hier fehlte zweites %-Zeichen !!!

move "%src%\!Fn:~-5!.* % hier ist das "-Zeichen zu löschen !!!

Aber trotzdem wie mein bei uns in Bayern sagen würde "Host a Maß guat" :-) face-smile
Bitte warten ..
Mitglied: Biber
26.09.2006 um 14:15 Uhr
Na, auf das Maß komm ich auch auch Becks-Trinker gern mal wieder zurück ;-) face-wink

Sorry für die Flüchtigkeitsfehler - die Variable %src% habe ich auch tatsächlich erst stehend freihändig hier beim Kommentarschreiben mit drangeflanscht (halt ungetestet).

Na ja, wenn ich so miterlebe, wie lange es braucht, bis wir so einen kleinen Zweizeiler zum Fliegen bringen, dann hab ich auch Verständnis für M$'s Vista-Terminprobleme..

Gruß
Biber
[Edit]
Habe die Tippfehler oben im geposteten Beispiel korrigiert und außerdem noch die Bildschirmmeldung "Echo Gemoved..." in "Echo Moved ..." geändert.

So schlechtes Deutsch wäre mir bestimmt doch irgendwann peinlich..
[/Edit]
Bitte warten ..
Mitglied: Herby-z
27.09.2006 um 09:00 Uhr
Guten Morgen Allerseits:

Wie kann ich genau den umgekehrten Effekt erzielen:

::----snipp MoveIntoRechNo.bat
@echo on & setlocal enableDelayedExpansion & set "target=C:\Ziel" & set "src=C:\Start"
For /l %%i in (1000015000,1,1000030000) do set "fn=%%i" && if exist "%src%\!Fn:~-9!.*" (
if not exist "%target%\!Fn:~1,9!" md %target%\!Fn:~1,9!
move /-y %src%\!Fn:~-9!.* %target%\!Fn:~1,9!\ >nul && echo Gemoved: %target%\!Fn:~1,9!\!Fn:~-9!.*
)

Ich möchte gerne eine Batch welche alles wieder in den Urzustand bringt,
d.H. Alle Dateien wieder in einen Ordner und die leeren Ordner löschen.
Nur die leeren Ordner, da ich nur einen bestimmten Bereich zurück moven möchte zwecks Export alter Rechnungen

Gruss
Herby
Bitte warten ..
Mitglied: Herby-z
27.09.2006 um 10:07 Uhr
Habe ich tatsächlich selbst geschafft :-) face-smile


Bitte warten ..
Mitglied: Biber
27.09.2006 um 10:45 Uhr
Habe ich tatsächlich selbst geschafft
.. war ich auch fest von ausgegangen... ;-) face-wink

Das sieht auch so stabil aus, dass Du getrost aus dem "echo on" wieder ein "echo off" machen kannst.

Zumindest Deine Anforderungs-Variante könnten wir jetzt virtuell auf "Gelöst" setzen...

Grüße
Biber
Bitte warten ..
Mitglied: DragonKM
14.11.2006 um 08:04 Uhr
öhm ich brauche sowas ähnliches, aber nicht so aufwendig.

Ich hoffe ich bin hier richtig. Es geht sich eigentlich um ein Onlinespiel, für welches man diverse Karten runterladen kann.

Diese Karten sind aufgeteilt in diese Dateitypen:

*.u
*.umx
*.unr
*.uax
*.utx

Diese Dateien sollen aus verschiedenen Ordnern gesucht werden und dann in diese Ordner kopiert werden (nicht verschoben)

unr -> Maps
umx -> Music
uax -> Sounds
u -> System
utx -> Textures

Beispiel:

Auf meiner F-Partition hab ich einen Ordner namens "Maps-Download"
Darin sind ca 2500 Ordner, die alle unterschiedlich benannt sind (z.B. "-=[TMTL]=-SniPeZ")

Das Script soll nun aus diesen Ordnern die betreffenden Dateien suchen, die neuen Ordner anlegen und die Dateien dort rein kopieren.

Soll später so aussehen

F:
-- Maps-Download
----- Sortiert
--------- Maps
--------- Sounds
--------- Textures
--------- System
--------- Music
--------- Unbekannt


Kann mir da jemand helfen? Ich bin zulange aus den Batch Sachen raus :( face-sad
Bitte warten ..
Mitglied: Biber
14.11.2006 um 21:35 Uhr
Moin DragonKM,

na ja... Dein Anliegen passt schon unter diese Überschrift...
..aber langsam wird es hier unübersichtlich.
Bitte nächstes Mal einen neuen Thread aufmachen.

Aber lass uns mal zusehen, dass wir Deine Frage diesmal eben noch hier mit abfackeln.

3 Rückfragen vorab:

a) Habe ich das richtig verstanden, dass Du 2500 Ordner mit Namen wie "(z.B.-=[TMTL]=-SniPeZ")
parallel zum vorgesehenen neuen Verzeichnis "Sortiert" unterhalb von "F:\Map-Downloads" haben möchtest?
IMHO wäre es sinnvoller, alles aus den Unterverzeichnissen Krusch, KrimsKrams und Gedöns
unterhalb F:\Map-Downloads herauszukopieren in ein Verzeichnis "F:\Sortiert" eine Ebene höher.

b) Da die Wahrscheinlich relativ hoch ist, das "Kollisionen" auftreten, also eine zu kopierende Datei schon auf eine vorhandene gleichnamige trifft: Was soll passieren?
Letzte gewinnt? Erste bleibt? BSOD aufrufen?

c) How the f*ck spricht man/frau "-=[TMTL]=-SniPeZ" aus???

Wenn Du zumindest die ersten beiden Rückfragen noch beantworten könntest...

Grüße
Biber
Bitte warten ..
Mitglied: DragonKM
15.11.2006 um 05:41 Uhr
Ah Biber :) face-smile Du hast mir schonmal geholfen (erinnerst du Dich?)

Zu 1:

Das ist natürlich auch möglich und sinnvoller

Zu 2:

Die Datei die größer ist soll gewinnen :) face-smile

Zu 3:

Erklärung

-=[TMTL]=- Ist entweder der Ersteller der Map oder der Clan (Online-Spieler-Gemeinschaft)

SniPeZ = Snaips (Soll wohl sowas wie moderne Sprache sein und lässt auf eine Scharfschützen Map schliessen)


Liebe Grüße

Dragon
Bitte warten ..
Mitglied: Biber
15.11.2006 um 15:22 Uhr
Moin Dragon,

das Schreiben des Schnipsels ist kein Problem...
...nur das Beschreiben dauert.

Ich habe es versucht, die eventuell zu ändernden Stellen wartbar in Variablen zu halten.
An die krytischen Verarbeitungszeilen musst Du nur zum Entfernen der ECHO's nach dem Testen ran.

Greetz and have fun.
Biber
P.S. Ach ja... bitte gib zügig Rückmeldung... ich möchte diesen Thread hier jetzt endlich schließen.
Bitte warten ..
Mitglied: DragonKM
15.11.2006 um 17:42 Uhr
Ok das klappt, ich habe noch folgendes hinzugefügt

:start
if not exist "F:\Sortiert" md F:\Sortiert
if not exist "F:\Sortiert\Maps" md F:\Sortiert\Maps
if not exist "F:\Sortiert\Music" md F:\Sortiert\Music
if not exist "F:\Sortiert\Sounds" md F:\Sortiert\Sounds
if not exist "F:\Sortiert\System" md F:\Sortiert\System
if not exist "F:\Sortiert\Textures" md F:\Sortiert\Textures



Aber was ist mit den Dateien, die nicht in das Suchraster passen? zum Beispiel txt Dateien oder so? Die sollten ja dann direkt in den Sortiert Ordner....
Bitte warten ..
Mitglied: Biber
15.11.2006 um 18:11 Uhr
Moin DragonKM,

na ja, das wird uns nicht so vor massive Probleme stellen, denke ich...

Darf ich den Beitrag jetzt schließen? *gg

Grüße
Biber
[Edit]
Eigentlich, da die Dateien ja kopiert werden und nicht verschoben, werden mit dem obigen Schnipsel
auch wieder die Dateien mit den Endungen "*.unr *.umx *.uax *.u *.utx" ein zweites Mal kopiert... in den Ziel-Root-Ordner "F:\Sortiert"
Wenn das nicht sein soll, dann noch mal die untere FOR /R -Anweisung ergänzen:
[/Edit]
Bitte warten ..
Mitglied: DragonKM
15.11.2006 um 20:52 Uhr
Ja kannst dicht machen, geht einwandfrei :) face-smile Vielen Dank
Bitte warten ..
Heiß diskutierte Inhalte
LAN, WAN, Wireless
Starlink im Unternehmen?
0xFFFFVor 20 StundenFrageLAN, WAN, Wireless40 Kommentare

Guten Morgen Admins, leider leiden wir darunter, dass wir uns hier in DE noch in einem Entwicklungsland was die Internetanbindung angeht, sehr. Nun kam ...

Off Topic
Klimaanlage im Serverraum
gelöst imebroVor 17 StundenFrageOff Topic20 Kommentare

Hallo, wir haben einen kleinen Serverraum (viell. 5 - 6 m²), in dem ein Serverschrank steht. Der Raum hat kein Fenster!!! Darin befinden sich ...

Microsoft
Datenkrake - Browser
DennisWeberVor 1 TagErfahrungsberichtMicrosoft11 Kommentare

Hallo zusammen, ich empfehle euch mal definitiv in "Temp" Verzeichnis eures Browsers zu schauen. Es war für mich erschreckend, wie viele wichtige Dokumente und ...

Netzwerkmanagement
Sicherheitsrisiken Synology DS Admin Konto
RitchtoolsVor 1 TagFrageNetzwerkmanagement6 Kommentare

Hallo Zusammen, ich habe die Pflege von einem Firmen NAS übernommen (Synology) es sind mehrere Rechner im Netzwerk die auf Daten zugreifen. Leider hat ...

Windows 10
Windows 10 hängt bei Neustart immer bei "Bitte warten" über Stunden
gelöst Odde23Vor 18 StundenFrageWindows 1023 Kommentare

Ich habe seit längerem, um genau zu sein seit gut einem Jahr, da wurde der Rechner gekauft, das Problem, dass der Rechner bei einem ...

Windows 10
Windows 10 verliert die Druckertreiber
KMP1988Vor 1 TagFrageWindows 1010 Kommentare

Servus zusammen, wir haben bei einem Kunden folgende Konstellation: - Server2019 (AD, DNS, DHCP) - Server2019 (Print-Server-Rolle) - W10-Clients Die Drucker werden übers Logon-Scirpt ...

DNS
Opendns.com - Kosten?
cordialVor 1 TagFrageDNS2 Kommentare

Moin, Ich möchte gerne den OpenDNS Dienst mal verstehen. Hab da schon länger einen Account mit Filterung. Die "Free" Edition bei OpenDNS ist doch ...

Windows 10
Windows 10 System Recovery Ordner fast 60 GB - Wie löschen?
Looser27Vor 1 TagFrageWindows 106 Kommentare

Guten Morgen, bei einem unserer Clients funktioniert scheinbar das automatische Aufräumen nach Updates / Upgrades nicht. Wie kann ich dem Kollegen auf die Schnelle ...