Dateien anhand des Namens in neue Ordner verschieben
Hallo Leute,
kann mir jemand von Euch mit diesem Problem helfen:
Ich habe einen Ordner mit Dateien der folgenden Struktur:
abc1_hanswurst456.jpg
abc1_hanswurst468.jpg
abc1_hanswurst471.jpg
...
abc2_hanswurst521.jpg
abc2_hanswurst530.jpg
...
abc3_hanswurst552.jpg
abc3_hanswurst561.jpg
...
klm1_hanswurst444.jpg
klm1_hanswurst455.jpg
klm1_hanswurst477.jpg
...
klm2_hanswurst444.jpg
klm2_hanswurst455.jpg
klm2_hanswurst477.jpg
Diese Dateien sollen wie folgt abgelegt werden:
abc1/hanswurst456.jpg
abc1/hanswurst468.jpg
abc1/hanswurst471.jpg
...
abc2/hanswurst521.jpg
abc2/hanswurst530.jpg
...
abc3/hanswurst552.jpg
abc3/hanswurst561.jpg
...
klm1/hanswurst444.jpg
klm1/hanswurst455.jpg
klm1/hanswurst477.jpg
...
klm2/hanswurst444.jpg
klm2/hanswurst455.jpg
klm2/hanswurst477.jpg
Besonderheit:
Eine identische Datei info.txt soll in jeden neuen Ordner kopiert werden.
Hinweis:
- Die Dateien sollte idealerweise verschoben werden und nicht kopiert (falls das geht)
- Der erste Underscore kann gerne als String-Trenner verwendet werden
- Die Ordner müssen angelegt werden/ sind noch nicht vorhanden
Wäre MEGA genial, wenn das jemand von Euch hinbekommt (und mir auch noch sagt, wie ich das Script starte - hehehe )
Viele Grüße!
Jan
PS: Ich habe hier zwar schon eine Lösung gefunden, die nahezu das macht, was ich auch bräuchte, kenne mich aber mit Scripten so wenig aus, dass ich es wohl nicht auf meine Bedürfnisse zurecht geschnitten bekomme ...
kann mir jemand von Euch mit diesem Problem helfen:
Ich habe einen Ordner mit Dateien der folgenden Struktur:
abc1_hanswurst456.jpg
abc1_hanswurst468.jpg
abc1_hanswurst471.jpg
...
abc2_hanswurst521.jpg
abc2_hanswurst530.jpg
...
abc3_hanswurst552.jpg
abc3_hanswurst561.jpg
...
klm1_hanswurst444.jpg
klm1_hanswurst455.jpg
klm1_hanswurst477.jpg
...
klm2_hanswurst444.jpg
klm2_hanswurst455.jpg
klm2_hanswurst477.jpg
Diese Dateien sollen wie folgt abgelegt werden:
abc1/hanswurst456.jpg
abc1/hanswurst468.jpg
abc1/hanswurst471.jpg
...
abc2/hanswurst521.jpg
abc2/hanswurst530.jpg
...
abc3/hanswurst552.jpg
abc3/hanswurst561.jpg
...
klm1/hanswurst444.jpg
klm1/hanswurst455.jpg
klm1/hanswurst477.jpg
...
klm2/hanswurst444.jpg
klm2/hanswurst455.jpg
klm2/hanswurst477.jpg
Besonderheit:
Eine identische Datei info.txt soll in jeden neuen Ordner kopiert werden.
Hinweis:
- Die Dateien sollte idealerweise verschoben werden und nicht kopiert (falls das geht)
- Der erste Underscore kann gerne als String-Trenner verwendet werden
- Die Ordner müssen angelegt werden/ sind noch nicht vorhanden
Wäre MEGA genial, wenn das jemand von Euch hinbekommt (und mir auch noch sagt, wie ich das Script starte - hehehe )
Viele Grüße!
Jan
PS: Ich habe hier zwar schon eine Lösung gefunden, die nahezu das macht, was ich auch bräuchte, kenne mich aber mit Scripten so wenig aus, dass ich es wohl nicht auf meine Bedürfnisse zurecht geschnitten bekomme ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 309397
Url: https://administrator.de/contentid/309397
Ausgedruckt am: 17.11.2024 um 17:11 Uhr
17 Kommentare
Neuester Kommentar
Hi, vielleicht hilft dir das:
Erklärung:
Wenn es exakt Vorn vier Stellen sind, dann kann man auch mit Zeile 6 arbeiten, dann fällt
Zeile 7 weg und muss entfernt werden.
Wenn man nicht exakt weiß aus wie vielen Stellen die Präfix besteht, kann man mit der Schleife (Zeile 7) arbeiten, dann ist auch die Zeile 6 Überflüssen...
Das echo muss selbstverständlich entfernt werden, wenn es passt...
Mach wie es dir gefällt
@echo off & setlocal EnableDelayedExpansion
cls
set "Typ=*.jpg"
for /f "delims=" %%i in ('dir /b /a-d "%Typ%"') do (
set "Datei=%%i"
REM set Verzeichnis=!Datei:~0,4!
for /f "delims=_" %%j in ("!Datei!") do set "Verzeichnis=%%j"
echo md "!Verzeichnis!" 2>nul
echo move "%%i" "!Verzeichnis!"
echo copy info.txt "!Verzeichnis!"
)
pause>nul
Wenn es exakt Vorn vier Stellen sind, dann kann man auch mit Zeile 6 arbeiten, dann fällt
Zeile 7 weg und muss entfernt werden.
Wenn man nicht exakt weiß aus wie vielen Stellen die Präfix besteht, kann man mit der Schleife (Zeile 7) arbeiten, dann ist auch die Zeile 6 Überflüssen...
Das echo muss selbstverständlich entfernt werden, wenn es passt...
Mach wie es dir gefällt
Moin,
hast Du da nicht noch etwas vergessen? Die Dateien sollen dann ja auch den Anfang verlieren.
DAzu müßte es dann so aussehen (ungestestet)
Gibt es eigentlich ein Symbol zu ":~", was sagt, daß der komplette Rest genommen werden soll oder muß man das lösen, wie ich das hier gemacht habe?
hast Du da nicht noch etwas vergessen? Die Dateien sollen dann ja auch den Anfang verlieren.
DAzu müßte es dann so aussehen (ungestestet)
@echo off & setlocal EnableDelayedExpansion
cls
set "Typ=*.jpg"
for /f "delims=" %%i in ('dir /b /a-d "%Typ%"') do (
set "Datei=%%i"
REM set Verzeichnis=!Datei:~0,4!
REM set nDatei=!Datei:~6,50!
for /f "tokens=1,2 delims=_" %%j in ("!Datei!") do (
set "Verzeichnis=%%j"
set "nDatei=%%k"
)
echo md "!Verzeichnis!" 2>nul
echo move "%%i" "!Verzeichnis!\!nDatei!"
)
pause>nul
Gibt es eigentlich ein Symbol zu ":~", was sagt, daß der komplette Rest genommen werden soll oder muß man das lösen, wie ich das hier gemacht habe?
ups da habe ich was vergessen
Zeile 7 und 9 mit der hier tauschen, dann sollte es so laufen wie es soll.
@Ben.Blake.79 hatte ich komplett übersehen, Danke! Zu ":~" ist mir nichts anderes bekannt.
Zeile 7 und 9 mit der hier tauschen, dann sollte es so laufen wie es soll.
for /f "delims=_ tokens=1,2" %%j in ("!Datei!") do set "Verzeichnis=%%j" &set "nDatei=%%k"
...
echo move "%%i" "!Verzeichnis!\!nDatei!"
@Ben.Blake.79 hatte ich komplett übersehen, Danke! Zu ":~" ist mir nichts anderes bekannt.
Wieviele "Stellen" (1.,2.,3._name) gibt es maximal? und wieviele Verzeichnisse? Da wird es etwas länger. Wieviele dieser Sonderfälle sind es, lohnt es sich da überhaupt jemanden eine halbe Stunde ein Skript schreiben zu lassen, in der Zeit sind die auch von Hand kopiert.
Die liegen ja jetzt schon umbenannt in Ordnern "1.,2.,3." usw. und können von Hand alle auf einmal in die richtigen Ordner verschoben werden... in einer halben Stunde schafft man viel...
ps: um zu kopieren statt zu verschieben, einfach das "move" durch "copy" ersetzen...
Die liegen ja jetzt schon umbenannt in Ordnern "1.,2.,3." usw. und können von Hand alle auf einmal in die richtigen Ordner verschoben werden... in einer halben Stunde schafft man viel...
ps: um zu kopieren statt zu verschieben, einfach das "move" durch "copy" ersetzen...
Wenn es bei diesem Einzelfall bleibt, dann ist das w.o. beschrieben schnell erledigt. Alleine, Variablen für 25 Präfixe zuzuordnen dauert eine Ewigkeit, muß ja alles getippt werden, und wenn es dann nicht geht, finde mal einen Fehler.... Naja, mit Excel kann man da die Aufstellung vielleicht etwas beschleunigen, aber mal so eben fix geht das trotzdem nicht...
Aber das ist ja kein Programme-Bestell-Service hier. Wenn Du selbst etwas lernen willst, helfen Dir alle hier gern nach besten Kräften, aber das geht dann doch zu weit... Außer vielleicht, das macht jemand mal als Übung.
Die For-Funktion ermöglicht übrigens maximal eine Unterteilung in 26 Teile (%%a-%%z oder %%A-&&Z), da wäre deine Anwendung (25 Gruppen plus der Fotoname) schon der Grenzfall, was ist denn, wenn es 26 Gruppen sind? Dann müßte man es noch weiter aufblähen... Also detailliertere Angaben wären da schon hilfreich.
Warte mal, was dein neuer Rechner bringt (wenn Dein jetziger aber keine 10 Jahre alte Gurke ist, versprich Dir da mal nicht zu viel von...) und wenn Du Dich näher mit der Thematik beschäftigen willst, helf ich Dir auch gern weiter...
Das ist jedenfalls meine Meinung...
kleiner Tip: Wenn Du die sowieso vorher alle einmal bearbeiten mußt, dann kannst Du das vielleicht dort sinnvoll mit erledigen?
Aber das ist ja kein Programme-Bestell-Service hier. Wenn Du selbst etwas lernen willst, helfen Dir alle hier gern nach besten Kräften, aber das geht dann doch zu weit... Außer vielleicht, das macht jemand mal als Übung.
Die For-Funktion ermöglicht übrigens maximal eine Unterteilung in 26 Teile (%%a-%%z oder %%A-&&Z), da wäre deine Anwendung (25 Gruppen plus der Fotoname) schon der Grenzfall, was ist denn, wenn es 26 Gruppen sind? Dann müßte man es noch weiter aufblähen... Also detailliertere Angaben wären da schon hilfreich.
Warte mal, was dein neuer Rechner bringt (wenn Dein jetziger aber keine 10 Jahre alte Gurke ist, versprich Dir da mal nicht zu viel von...) und wenn Du Dich näher mit der Thematik beschäftigen willst, helf ich Dir auch gern weiter...
Das ist jedenfalls meine Meinung...
kleiner Tip: Wenn Du die sowieso vorher alle einmal bearbeiten mußt, dann kannst Du das vielleicht dort sinnvoll mit erledigen?
Hi,
möchtest du aus abc1, abc2, abc5_hanswurst435.jpg zu abc5/hanswurst435.jpg
und aus klm4, klm8_hanswurst189.jpg zu klm8/hanswurst189.jpg ??
Nur wenn die Dateien exakt so aufgebaut sind (1 oder 2 Kommata) wird das script funktionieren, es ist nur für die Kommata Sonderfälle da:
Es wird ein leeres Verzeichnis erstellt, da die Datei nicht passt wird dort nichts verschoben.
Das echo vor md und move muss du jeweils entfernen, wenn alles passt!
Ich übernehme keine Verantwortung wenn irgendwas schief geht! Mach vorher ein Backup!
möchtest du aus abc1, abc2, abc5_hanswurst435.jpg zu abc5/hanswurst435.jpg
und aus klm4, klm8_hanswurst189.jpg zu klm8/hanswurst189.jpg ??
Nur wenn die Dateien exakt so aufgebaut sind (1 oder 2 Kommata) wird das script funktionieren, es ist nur für die Kommata Sonderfälle da:
@echo off & setlocal EnableDelayedExpansion
cls
set "Typ=*.jpg"
for /f "delims=" %%x in ('dir /b /a-d "*,%Typ%"') do (
echo DateiName: "%%x"
echo.----------
for /f "delims=, tokens=3" %%a in ("%%x") do (
set "Datei=%%a"
echo aus: "%%x" wird: "!Datei!"
for /f "delims=_ tokens=1,2" %%j in ("!Datei!") do (
set "Verzeichnis=%%j" &set "nDatei=%%k"
echo VerzeichnisName: !Verzeichnis!
echo NeueDateiName: !nDatei!
echo md "!Verzeichnis!" 2>nul
echo move "%%x" "!Verzeichnis!\!nDatei!" 2>nul
)
)
echo.
for /f "delims=, tokens=2" %%b in ("%%x") do (
set "Datei=%%b"
echo aus: "%%x" wird: "!Datei!"
for /f "delims=_ tokens=1,2" %%j in ("!Datei!") do (
set "Verzeichnis=%%j" &set "nDatei=%%k"
echo VerzeichnisName: !Verzeichnis!
echo NeueDateiName: !nDatei!
echo md "!Verzeichnis!" 2>nul
echo move "%%x" "!Verzeichnis!\!nDatei!" 2>nul
)
)
echo.
)
pause>nul
Das echo vor md und move muss du jeweils entfernen, wenn alles passt!
Ich übernehme keine Verantwortung wenn irgendwas schief geht! Mach vorher ein Backup!
Hallo, jetzt wo wir alle Fragen geklärt haben glaube ich, dass dieses script dich bei den Exoten mit Kommata zum Ziel führen kann und wird:
Erklärung
Das Script besteht aus zwei Teilen, das erste Teil verarbeitet blub1, blub2, blub3_blub100.jpg, sprich Dateien mit zwei Kommata in Dateinamen.
Ausgabe ist:
blub1\blub100.jpg
blub2\blub100.jpg
blub3\blub100.jpg
Teil zwei verarbeitet foo1, foo2_foobar150.jpg ähnliche Dateinamen mit einem Komma drin.
Ausgabe ist:
foo1\foobar150.jpg
foo2\foobar150.jpg
Das Script muss erst die zwei Kommas Dateinamen verarbeiten, erst dann werden erfolgreich die ein Komma Dateinamen zerlegt, kopiert und verschoben.
Das echo vor md, copy und move muss du jeweils entfernen, sollte alles korrekt ablaufen.
Weiterhin, Ich übernehme keine Verantwortung wenn irgendwas schief geht! Mach vorher ein Backup!
@echo off & setlocal EnableDelayedExpansion
cls
echo.
:: Verarbeitung von "abc1, abc2, abc5_hanswurst435.jpg" ähnlichen DateiNamen
set "Typ=*.jpg"
set "OrgDatei=*,*,"
for /f "delims=" %%x in ('dir /b /a-d "%OrgDatei%%Typ%"') do (
set "DateiName=%%x"
echo DateiName: "%%x"
for /f "delims=, tokens=1,2,3" %%a in ("!Dateiname!") do (
set "Ver1=%%a"
set "Ver2=%%b"
set "Ver1=!Ver1: =!"
set "Ver2=!Ver2: =!"
echo Verzeichnis 1: !Ver1!
echo Verzeichnis 2: !Ver2!
for /f "delims=_ tokens=1,2" %%i in ("%%c") do (
set "Ver3=%%i"
set "nDatei=%%j"
set "Ver3=!Ver3: =!"
echo Verzeichnis 3: !Ver3!
echo NeueDatei: !nDatei!
)
echo md "!Ver1!" 2>nul
echo md "!Ver2!" 2>nul
echo md "!Ver3!" 2>nul
echo copy "%%x" "!Ver1!\!nDatei!" 2>nul
echo copy "%%x" "!Ver2!\!nDatei!" 2>nul
echo move "%%x" "!Ver3!\!nDatei!" 2>nul
echo.
)
)
echo Teil 1 Fertig &pause>nul
echo.
:: Verarbeitung von "klm4, klm8_hanswurst189.jpg" ähnlichen DateiNamen
set "Typ=*.jpg"
set "OrgDatei=*,"
for /f "delims=" %%x in ('dir /b /a-d "%OrgDatei%%Typ%"') do (
set "DateiName=%%x"
echo DateiName: "%%x"
for /f "delims=, tokens=1,2" %%a in ("!Dateiname!") do (
set "Ver1=%%a"
set "Ver1=!Ver1: =!"
echo Verzeichnis 1: !Ver1!
for /f "delims=_ tokens=1,2" %%i in ("%%b") do (
set "Ver2=%%i"
set "nDatei=%%j"
set "Ver2=!Ver2: =!"
echo Verzeichnis 2: !Ver2!
echo NeueDatei: !nDatei!
)
echo md "!Ver1!" 2>nul
echo md "!Ver2!" 2>nul
echo copy "%%x" "!Ver1!\!nDatei!" 2>nul
echo move "%%x" "!Ver2!\!nDatei!" 2>nul
echo.
)
)
echo Teil 2 Fertig &pause>nul
Das Script besteht aus zwei Teilen, das erste Teil verarbeitet blub1, blub2, blub3_blub100.jpg, sprich Dateien mit zwei Kommata in Dateinamen.
Ausgabe ist:
blub1\blub100.jpg
blub2\blub100.jpg
blub3\blub100.jpg
Teil zwei verarbeitet foo1, foo2_foobar150.jpg ähnliche Dateinamen mit einem Komma drin.
Ausgabe ist:
foo1\foobar150.jpg
foo2\foobar150.jpg
Das Script muss erst die zwei Kommas Dateinamen verarbeiten, erst dann werden erfolgreich die ein Komma Dateinamen zerlegt, kopiert und verschoben.
Das echo vor md, copy und move muss du jeweils entfernen, sollte alles korrekt ablaufen.
Weiterhin, Ich übernehme keine Verantwortung wenn irgendwas schief geht! Mach vorher ein Backup!
Hi, ja das obere Script zerlegt und verarbeitet erst zwei, dann ein Kommata Dateien.
Das von dir gewünschte Script musste dann komplett dynamisch wachsen mit der Anzahl der Kommas, da wage ich mich wenn ich ehrlich bin nicht ran, sonst mache ich noch mehr kaputt als es bringt und das ganze ist schon sehr viel arbeit.
Momentan hab ich auch kein Plan wie das machbar wäre.
Eine Lösung des Problemes würde auch mich sehr interessiere, daraus könnte man sicherlich sehr viel lernen.
Ich wünsche dir noch einen schönen Sonntag
Das von dir gewünschte Script musste dann komplett dynamisch wachsen mit der Anzahl der Kommas, da wage ich mich wenn ich ehrlich bin nicht ran, sonst mache ich noch mehr kaputt als es bringt und das ganze ist schon sehr viel arbeit.
Momentan hab ich auch kein Plan wie das machbar wäre.
Eine Lösung des Problemes würde auch mich sehr interessiere, daraus könnte man sicherlich sehr viel lernen.
Ich wünsche dir noch einen schönen Sonntag
Es freut mich, daß ich das doch richtig verstanden habe und abschätzen konnte, was das für einen Aufwand bedeutet.
Mein Ansatz wäre folgender:
Man könnte auch den Rest, wenn da noch Verzeichnisse drin sind, noch zusammen mit den Originalnamen in einer Liste speichern und das dann nochmal durchrattern lassen, oder es als Option einbauen, 1. Liste erstellen, 2. abarbeiten, (Liste von der Liste von der Liste... das könnte man theoretisch beliebig fortsetzen, zumal die Pfade ja mitterweile auch länger als 256 Zeichen werden dürfen...) und dann aber nur mit 49 Verzeichnissen je Bearbeitung (zwei tokens gehen für die beiden Listenspalten drauf)
Das System ist ziemlich einfach, es ist eben die Schreibarbeit und die damit zu erwartende Fehlerquote, was den Aufwand bedeutet...
Die Syntax für die Variablen könnte man sich von Excel basteln lassen, das vermeidet zumindest dort Tipfehler...
Es ist eben die schiere Größe, was hier das Problem ist...
Ich gehe mal davon aus, daß ein Crack etwa 2-4 Stunden dafür braucht, wenn er keine Fehler einbaut (allein ein Prüfdurchlauf dürfte eine Stunde dauern...), ich bräuchte dafür wahrscheinlich mindestens einen Tag, bei besonders kreativen Fehlern kann es auch eine Woche werden...
Wenn es mich sackt, setze ich mich da mal als Übung ran,, aber das passiert nicht heute und nicht morgen - auch wenn es mich schon reizen würde...
Ich gehe aber davon aus, mit einer echten Programmiersprache ginge es eleganter...
ps: und wenn er es dann durchrattern läßt bei 1000 Dateien, kann er sich dann in der Zwischenzeit Herr der Ringe anschauen, alle drei Teile, und den Hobbit, in der Special Extendet Version, mit Bonusmaterial.... und sich abschließend noch ein Fußbalspiel ansehen
Mein Ansatz wäre folgender:
- Für jede Datei das erste Skript beginnend bei %%a ausführen, allerdings bis %%z (tokens=1-24,25*
- suchen, in welchem Token der Punkt ist, das ist dann die Datei => das gibt immer den letzen aus, daher ist es egal, ob vorher einer auftaucht, alles umspeichern (ich gehe davon aus, daß %%* nicht in einer Unterschleife aufgerufen werden kann, auch wenn es dort nicht Klein-, sondern Großbuchstaben sind, aber falls doch (darum Max=52?, technisch gesehen ist man ja noch in der gleichen Schleife, müßte ich probieren oder suchen) könnte man sich das sparen...)
- Findet der in dem auch ein Komma (=> es darf im eigentlichen Namen kein Komma vorkommen, aber das ist ja klar), 2. Schleife aufmachen, beginnend bei %%A und das Spiel von vorn
- Findet er dort kein Komma, kann der letzte Schritt übersprungen werden...
- Und dann läßt man ihn das erste Skript runterrattern, aber eben mit mit 26 (oder 2x26) Variablen. Das ergibt dann maximal 51 mögliche Verzeichnisse.
Man könnte auch den Rest, wenn da noch Verzeichnisse drin sind, noch zusammen mit den Originalnamen in einer Liste speichern und das dann nochmal durchrattern lassen, oder es als Option einbauen, 1. Liste erstellen, 2. abarbeiten, (Liste von der Liste von der Liste... das könnte man theoretisch beliebig fortsetzen, zumal die Pfade ja mitterweile auch länger als 256 Zeichen werden dürfen...) und dann aber nur mit 49 Verzeichnissen je Bearbeitung (zwei tokens gehen für die beiden Listenspalten drauf)
Das System ist ziemlich einfach, es ist eben die Schreibarbeit und die damit zu erwartende Fehlerquote, was den Aufwand bedeutet...
Die Syntax für die Variablen könnte man sich von Excel basteln lassen, das vermeidet zumindest dort Tipfehler...
Es ist eben die schiere Größe, was hier das Problem ist...
Ich gehe mal davon aus, daß ein Crack etwa 2-4 Stunden dafür braucht, wenn er keine Fehler einbaut (allein ein Prüfdurchlauf dürfte eine Stunde dauern...), ich bräuchte dafür wahrscheinlich mindestens einen Tag, bei besonders kreativen Fehlern kann es auch eine Woche werden...
Wenn es mich sackt, setze ich mich da mal als Übung ran,, aber das passiert nicht heute und nicht morgen - auch wenn es mich schon reizen würde...
Ich gehe aber davon aus, mit einer echten Programmiersprache ginge es eleganter...
ps: und wenn er es dann durchrattern läßt bei 1000 Dateien, kann er sich dann in der Zwischenzeit Herr der Ringe anschauen, alle drei Teile, und den Hobbit, in der Special Extendet Version, mit Bonusmaterial.... und sich abschließend noch ein Fußbalspiel ansehen