Batch Script - Dateien nach Namen in Ordner Sortieren und umbennen
Eine Liste von Bilddateien soll in eine vorgegeben Ordnerstruktur kopiert werden und dann umbenannt werden in Abhängigkeit vom Dateinamen.
Hallo Batch Scripter,
ich habe einige Bilddateien, die in eine vorgegebene Ordnerstruktur kopiert werden müssen.
Die Struktur sieht in etwa so aus:
Die Dateien Bild_A01.. A02..A03...liegen alle im gleichen Hauptordner und sollen dann abhängig vom Namen in den entsprechenden Unterordner kopiert werden.
Also z.B. A01f01 in Order "W A01" und A01f02 in "W A02", hingegen A02f02 in "W B02" oder A04f05 in Order "W D05".
Die entsprechenden Unterordner sind schon vorhanden und in diesen liegen bereits Bilder, die den neuen Namen tragen. Diese sollen gelöscht werden und die kopierten Bilder sollen deren Namen bekommen, der immer gleich ist, mit Ausnahme des Anfangs, der von der letzen Ziffer im alten Dateinamen abhängig ist. Die Ordennamen und Bildernamen reichen von "W A01" - "W A12" bis "W H01" - "W H12". Also insgesamt 96 Unterordner, wobei es nicht immer alle 96 gibt.
Ich habe leider keine Ahnung von shell-scripten und wäre für Hilfe sehr dankbar.
vielen Dank. any-key
Hallo Batch Scripter,
ich habe einige Bilddateien, die in eine vorgegebene Ordnerstruktur kopiert werden müssen.
Die Struktur sieht in etwa so aus:
Alter Name | Ordner | Neuer Name |
---|---|---|
Bild_A01f01d0.tif | W A01 | Null - n00.tif |
Bild_A01f01d1.tif | W A01 | Eins - n00.tif |
Bild_A01f02d0.tif | W A02 | Null - n00.tif |
Bild_A01f02d1.tif | W A02 | Eins - n00.tif |
Bild_A02f01d0.tif | W B01 | Null - n00.tif |
Bild_A02f01d1.tif | W B01 | Eins - n00.tif |
Bild_A02f02d0.tif | W B02 | Null - n00.tif |
Bild_A02f02d1.tif | W B02 | Eins - n00.tif |
Die Dateien Bild_A01.. A02..A03...liegen alle im gleichen Hauptordner und sollen dann abhängig vom Namen in den entsprechenden Unterordner kopiert werden.
Also z.B. A01f01 in Order "W A01" und A01f02 in "W A02", hingegen A02f02 in "W B02" oder A04f05 in Order "W D05".
Die entsprechenden Unterordner sind schon vorhanden und in diesen liegen bereits Bilder, die den neuen Namen tragen. Diese sollen gelöscht werden und die kopierten Bilder sollen deren Namen bekommen, der immer gleich ist, mit Ausnahme des Anfangs, der von der letzen Ziffer im alten Dateinamen abhängig ist. Die Ordennamen und Bildernamen reichen von "W A01" - "W A12" bis "W H01" - "W H12". Also insgesamt 96 Unterordner, wobei es nicht immer alle 96 gibt.
Ich habe leider keine Ahnung von shell-scripten und wäre für Hilfe sehr dankbar.
vielen Dank. any-key
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 17.06.2010 um 21:04:09 Uhr
Ich weiss nicht.... macht ihr das wirklich unabsichtllch?
Kann doch eigentlich nicht sein, dass es nie richtig geschrieben wird...
Kann doch eigentlich nicht sein, dass es nie richtig geschrieben wird...
Content-ID: 145082
Url: https://administrator.de/forum/batch-script-dateien-nach-namen-in-ordner-sortieren-und-umbennen-145082.html
Ausgedruckt am: 22.04.2025 um 19:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo any-key und willkommen im Forum!
Wenn ich die Struktur richtig interpretiere, sollte das etwa so zu machen sein (ungetestet):
Grüße
bastla
Wenn ich die Struktur richtig interpretiere, sollte das etwa so zu machen sein (ungetestet):
@echo off & setlocal
set "Hauptordner=D:\Bilder"
set C=%temp%\ConvertFilename.vbs
>%C% echo D=WScript.Arguments(0):T=Array("Null","Eins"):B=Chr(CInt(Mid(D,7,2))+64):N=Mid(D,10,2):WScript.Echo "W "^&B^&N^&"_"^&T(Mid(D,13,1))^&" - n00.tif"
pushd "%Hauptordner%"
for /f %%i in ('dir Bild_*.tif') do for /f "tokens=1-2 delims=_" %%a in ('cscript //nologo %C% %%i') do copy %%i "%%a\%%b"
popd
Grüße
bastla
Moin any-key,
Vertipper sind hier gern gesehene Mitglieder...
Grundsätzlich kann du immer hinterher den Beitrag (oder einen Kommentar) editieren, wenn du angemeldet bist und "Editieren" auswählst.
bei Tippfehlern, auf die schon jemand Bezug genommen hat, ist es in der Regel zu spät
A propos Tippfehler...
bastla hat die auch einen zum Debuggen überlassen... bei der DIR-Anweisung in Zeile 8 fehlt der Parameter /B.
Der bewirkt, dass nur die Pfad/Dateinamen vom DIR-Befehl angezeigt werden, nicht die Header ("Volume in Laufwerk D heißt..." und Zusammenfassung ("X Dateien in Y Verzeichnissen")
Wenn du mit em ECHO-Befehl ein "was-wäre-wenn" simulieren willst, dann wäre meine Empfehlung:
--> So [mit den Codezeilen 08/09] lasse ich ZWEI FOR-Anweisungen, die bei bastla in EINER Zeile stehen, nacheinander anzeigen.
Eingefügt ist das GROSSgeschriebene ECHO.
Ausgabe bei mir wäre in etwa:
... bei den drei Testdateien, die ich mir angelegt habe.
Nähere Details kommen ggf. von bastla (falls er mich noch nicht überholt hat)
Grüße
Biber
Vertipper sind hier gern gesehene Mitglieder...
Grundsätzlich kann du immer hinterher den Beitrag (oder einen Kommentar) editieren, wenn du angemeldet bist und "Editieren" auswählst.
bei Tippfehlern, auf die schon jemand Bezug genommen hat, ist es in der Regel zu spät
A propos Tippfehler...
bastla hat die auch einen zum Debuggen überlassen... bei der DIR-Anweisung in Zeile 8 fehlt der Parameter /B.
Der bewirkt, dass nur die Pfad/Dateinamen vom DIR-Befehl angezeigt werden, nicht die Header ("Volume in Laufwerk D heißt..." und Zusammenfassung ("X Dateien in Y Verzeichnissen")
Wenn du mit em ECHO-Befehl ein "was-wäre-wenn" simulieren willst, dann wäre meine Empfehlung:
:: bastlasFilesorter.cmd
@echo off & setlocal
set "Hauptordner=F:\Schnipsel"
set C=%temp%\ConvertFilename.vbs
>%C% echo D=WScript.Arguments(0):T=Array("Null","Eins"):B=Chr(CInt(Mid(D,7,2))+64):N=Mid(D,10,2):WScript.Echo "W "^&B^&N^&"_"^&T(Mid(D,13,1))^&" - n00.tif"
pushd "%Hauptordner%"
for /f %%i in ('dir /b Bild_*.tif') do ECHO for /f "tokens=1-2 delims=_" %%a in ('cscript //nologo %C% %%i') do ....nothing
for /f %%i in ('dir /b Bild_*.tif') do for /f "tokens=1-2 delims=_" %%a in ('cscript //nologo %C% %%i') do ECHO copy %%i "%%a\%%b"
popd
--> So [mit den Codezeilen 08/09] lasse ich ZWEI FOR-Anweisungen, die bei bastla in EINER Zeile stehen, nacheinander anzeigen.
Eingefügt ist das GROSSgeschriebene ECHO.
Ausgabe bei mir wäre in etwa:
for /f "tokens=1-2 delims=_" %a in ('cscript //nologo C:\DOKUME~1\Biber\LOKALE~1\Temp\ConvertFilename.vbs Bild_A01f01d1.tif') do ....nothing
for /f "tokens=1-2 delims=_" %a in ('cscript //nologo C:\DOKUME~1\Biber\LOKALE~1\Temp\ConvertFilename.vbs Bild_A02f02d1.tif') do ....nothing
for /f "tokens=1-2 delims=_" %a in ('cscript //nologo C:\DOKUME~1\Biber\LOKALE~1\Temp\ConvertFilename.vbs Bild_A02f02d0.tif') do ....nothing
copy Bild_A01f01d1.tif "W A01\Eins - n00.tif"
copy Bild_A02f02d1.tif "W B02\Eins - n00.tif"
copy Bild_A02f02d0.tif "W B02\Null - n00.tif"
Nähere Details kommen ggf. von bastla (falls er mich noch nicht überholt hat)
Grüße
Biber
Hallo any-key!
Ich hatte zum Testen Deine Beispiele verwendet und die gewünschten Ergebnisse erhalten - direkt von der Kommandozeile nachzuvollziehen mit
Wie Du sicher schon den "
Wenn Du beim Start des Batches (im Beispiel in der Datei "D:\Kopieren.cmd" gespeichert) noch eine Umleitung der Ausgabe anfügst - etwa:
kannst Du danach die gesamte Ausgabe per Editor (oder zB Import in Excel) in Augenschein nehmen ...
Grüße
bastla
[Edit] @Biber
Als ob ich Dich schon jemals überholt hätte ...
Danke für's genaue Hinschauen
- ich hatte mich leider nur auf die Zerlegung und daher das VBScript konzentriert ...
[/Edit]
Ich hatte zum Testen Deine Beispiele verwendet und die gewünschten Ergebnisse erhalten - direkt von der Kommandozeile nachzuvollziehen mit
D:\>for %i in (Bild_A01f01d0.tif Bild_A01f01d1.tif Bild_A01f02d0.tif Bild_A01f02d1.tif Bild_A02f01d0.tif Bild_A02f01d1.tif Bild_A02f02d0.tif Bild_A02f02d1.tif) do @cscript //nologo %temp%\ConvertFilename.vbs %i
W A01_Null - n00.tif
W A01_Eins - n00.tif
W A02_Null - n00.tif
W A02_Eins - n00.tif
W B01_Null - n00.tif
W B01_Eins - n00.tif
W B02_Null - n00.tif
W B02_Eins - n00.tif
Mid
"-Teilen entnommen hast, werden die Zeichen 7 und 8 zum Buchstaben umgewandelt, 10 und 11 unverändert übernommen und aus der Ziffer auf Position 13 der Text "Null" oder "Eins" gemacht ...wenn ich mir die Ausgabe vorher anschauen möchte, reicht es dann "copy" durch "echo" zu ersetzen
Ja, Du kannst aber auch einfach das "echo
" unmittelbar vor "copy
" schreiben ...Wenn Du beim Start des Batches (im Beispiel in der Datei "D:\Kopieren.cmd" gespeichert) noch eine Umleitung der Ausgabe anfügst - etwa:
D:\Kopieren.cmd > D:\Ausgabe.txt
Grüße
bastla
[Edit] @Biber
Als ob ich Dich schon jemals überholt hätte ...
Danke für's genaue Hinschauen
[/Edit]