docluma
Goto Top

Batch - Dateien umbennen

Ich bin am verzweifeln, habe jetzt schon viel ausprobiert, bin aber noch nicht weit gekommen. Ich hoffe, es kann mir jemand helfen.

Besten Dank
docluma

Hallo,

ich habe folgende Verzeichnisstruktur

R:\_ToRename\
R:\_ToRename\20110522\1\
R:\_ToRename\20110523\1\
R:\_ToRename\20110524\1\
usw.
In diesen Verzeichnissen befinden sich die Dateien, die ich per batch-Datei umbennen möchte.

Die Dateien haben folgendes Format:
zB 00606E909A1D_m20110523232230.jpg

Nun möchte nun den Teil nach dem "m" behalten, da dieses das Datum mit Uhrzeit ist. Vor dem Zeitstring noch "cam1_" davor, den Teil mit der Zeit der Lesbarkeit wegen mit Unterstrichen unterteilen, und ans Ende (vorm Suffix) "_2" dranhängen.

Die Datei soll nach dem Umbennen wie folgt heissen:
cam1_20110523_232230_2.jpg

Die Batch-Datei befindet sich in R:\ToRename\

Folgendes habe ich erstes gemacht:

@echo off
set Quelle="R:\_ToRename"
Set DateiFilter="*.jpg"
for /r %Quelle% %%i in (%DateiFilter%) do rename %%i %%~ni_Test.jpg
end

Das funktioniert schon mal. Nun habe ich aber Probleme, den Dateinamen auseinander zu nehmen. Versucht habe ich verschiedenes mit Variablenzuweisung der Teile des Dateinames mit Part1=%%i:~15,8 und Part2=%%i:~23,6. Danach dann NewName=cam1_%Part1%_%Part2%_2.jpg
rename %%i=%NewName%.jpg

Versuche habe ich auch mit For /f "tokens= und delims probiert, aber da blicke ich garnicht durch.

Ich hoffe, ich habe mein Anliegen verständlich erklärt, und es kann mir jemand helfen.

Besten Dank schon mal
docluma
Kommentar vom Moderator Biber am May 24, 2011 um 19:42:33 Uhr
Batch - Dateien umbennen
...In diesen Verzeichnissen befinden sich die Dateien, die ich per batch-Datei umbennen möchte.
Set /a rgc+=2
#759
Die Datei soll nach dem Umbennen wie folgt heissen
Set /a rgc+=3
#760
Falls noch jemand da draussen ein Forschungsthema für einen ehrlich erworbenen Doktortitel sucht...
...Das Phänomen mit den unschreibbaren Worten mit mehreren "e"s und "n" auf kleiner Fläche sollte mal wissenschaftlich eruiert werden.
Vielleicht hiess auch Konrad Duden eigentlich Konrad Dudenen.... war damit aber chancenlos...

Content-Key: 166843

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

Printed on: April 19, 2024 at 17:04 o'clock

Member: bastla
bastla May 24, 2011 at 19:30:19 (UTC)
Goto Top
Hallo docluma und willkommen im Forum!

Der Ansatz ist ja schon nicht ganz übel face-smile - Du musst nur berücksichtigen, dass von Schleifenvariablen keine Teilstrings gebildet werden können (und dass die Zählung des Offsets bei 0 beginnt) - daher zB (ungetestet):
@echo off & setlocal
set "Quelle=R:\_ToRename"  
set "DateiFilter=*.jpg"  
for /r "%Quelle%" %%i in (%DateiFilter%) do set "Name=%%~ni" & call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "Part1=%Name:~14,8%"  
set "Part2=%Name:~22,6%"  
echo ren %1 "cam1_%Part1%_%Part2%_2%~x1"  
goto :eof
Das "echo" vor dem "ren" soll dem gefahrlosen Testen dienen - wenn's gut aussieht, einfach ersatzlos streichen ... face-wink
Versuche habe ich auch mit For /f "tokens= und delims probiert, aber da blicke ich garnicht durch.
Wenn Du nur den Teil nach dem "m" extrahieren müsstest und es kein weiteres "m" geben kann, einfach:
for /f "tokens=2 delims=m" %%a in ("%%~ni") do @echo %%a
- da Du aber dann trotzdem nochmals anhand der Zeichenzahl unterteilen willst, bietet es sich (wie oben) an, gleich alles per Stringzerlegung abzuhandeln ...

Grüße
bastla

[Edit] In Zeile 5 fehlendes "goto :eof" zum Beenden des Hauptprogrammes nachgetragen /Edit]
Member: docluma
docluma May 24, 2011 at 20:37:49 (UTC)
Goto Top
Hallo bastla

ja, genau das ist es!!! Funktioniert prima. Besten Dank. Nun habe ich aber noch ein Anliegen. Nach dem Umbennen will ich die Ordner dann noch verschieben. Wie ich das mache (xcopy) ist klar. Aber dein Script ended mit >goto :eof. Hm... Dieser Befehl bricht glaube ich die Batchverarbeitung ab. An welcher Stelle muss ich denn dann den xopy-Befehl einfügen?
Brauche ich da noch irgendwo ein zB goto :copy??

Besten Dank
docluma
Member: bastla
bastla May 24, 2011 at 20:43:14 (UTC)
Goto Top
Hallo docluma!

Was meinst Du mit "Ordner verschieben" - bisher ging es doch um Dateien?

Grüße
bastla

P.S.: Gut, dass Du mich daran erinnert hast - oben fehlt(e - habe es jetzt ergänzt face-wink) noch ein "goto :eof" - dessen Bedeutung ist übrigens immer "Beenden des Batches", wobei dies allerdings im Fall des in der letzten Zeile Stehenden eigentlich "Rücksprung in das Hauptprogramm" bedeutet ...
Member: docluma
docluma May 24, 2011 at 20:52:05 (UTC)
Goto Top
Hallo bastla,

ja die Dateien stecken ja in Ordnern drin.
Alles, was im Ordner R:\ToRename steckt, will ich dann dahin verschieben, wo es zum Schluss hingehört. Die Dateien werden ja richtig umbenannt.
also nachdem alles, was im Ordner R:\ToRename ist umbenannt ist, werden alle Ordner verschoben nach R:\Alerts

OK, Zeile 5 habe ich nachgetragen. Aber wo platziere ich dann den copy-Befehl?

mfg
docluma
Member: bastla
bastla May 24, 2011 at 20:55:49 (UTC)
Goto Top
Hallo docluma!
Aber wo platziere ich dann den copy-Befehl?
Da das, so interpretiere ich es mal, die letzte Aktion ist, die Dein Batch ausführen soll, genau vor die erwähnte Zeile 5 - diese beendet ja das Hauptprogramm (damit nicht nochmals das Unterprogramm ":ProcessFile" ausgeführt wird) ...

Grüße
bastla
Member: docluma
docluma May 24, 2011 at 21:12:25 (UTC)
Goto Top
Hallo bastla!

genau, da muss es hin. Super.
Besten Dank & schönen Abend noch

docluma
Member: TsukiSan
TsukiSan May 24, 2011 at 23:37:03 (UTC)
Goto Top
- da Du aber dann trotzdem nochmals anhand der Zeichenzahl unterteilen willst, bietet es sich (wie oben) an, gleich alles per Stringzerlegung abzuhandeln ...
und wir hoffen, dass einstellige Zahlen/Ziffern immer eine Null vorangehangen bekommen face-wink

Gruss
Tsuki