knochen
Goto Top

Ordnernamen kürzen

Hallo,

ich möchte gerne Ordner per Batch um 12 Zeichen am Anfang kürzen.

Beispiel:

Backup_neu__22.05.2010_Fotos

wird zu

22.05.2010_Fotos

Die Ordnernamen sind dabei keine Konstante, sie ändern sich mit der Zeit.

Kann mir jemand sagen, wie das geht?
Achja, eine Überprüfung, ob der Ordner schon vorhanden ist, wird dabei nicht benötigt.

Grüße

Content-ID: 143385

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

Ausgedruckt am: 15.11.2024 um 05:11 Uhr

bastla
bastla 22.05.2010 um 20:49:11 Uhr
Goto Top
Hallo Knochen und willkommen im Forum!

Dein Beispiel ließe auch eine andere Vorgangsweise (als genau 12 Zeichen abzuschneiden) zu, nämlich das Trennen anhand der "_" und Übernehmen des neuen Namens erst ab dem dritten daraus entstehenden Teil:
for /d %i in ("D:\Dein Backup-Ordner\*_*__*") do @for /f "tokens=2* delims=_" %a in ("%~nxi") do @echo ren "%i" "%b"
Dieser Einzeiler ist zum Testen direkt in der CMD-Shell gedacht und simuliert (wegen des "echo") das Umbenennen nur durch Ausgabe des entsprechenden Befehles (wenn Du das "echo" entfernst, werden die Namen tatsächlich geändert); falls Du einen Batch daraus machen willst, einfach jedes enthaltene Prozentzeichen verdoppeln.
Um aber tatsächlich die ersten 12 Zeichen abzuschneiden (was für mich allerdings im Zweifelsfall nur zweite Wahl wäre), könntest Du folgenden Batch verwenden (ebenfalls wegen des "echo" vor dem "ren" noch als Simulation):
@echo off & setlocal
set "Basis="D:\Dein Backup-Ordner"  
set "Maske=*_*__*"  

pushd "%Basis%"  
for /d %%i in ("%Maske%") do set "Name=%%~nxi" & call :ProcessDir "%%i"  
popd
goto :eof

:ProcessDir
echo ren %1 "%Name:~12%"  
goto :eof

Die Vorgabe des Namensschemas "*_*__*" in beiden Varianten soll es ermöglichen, den Vorgang mehrmals ausführen zu können, ohne bereits geänderte Namen nochmals zu kürzen.

Grüße
bastla
Knochen
Knochen 22.05.2010 um 22:30:07 Uhr
Goto Top
Hallo bastla und danke für deine Antwort!

Super, funktioniert perfekt.


Allerdings gibts es auch viele Ordner die folgendes Format haben:
1234567890temp_-_Logapache22.05.2010
oder auch Max_Mustermann_-_Rechnung_neu

Wie entferne ich alle Zeichen vor "_-_" inklusive diesen?
Also das nurnoch Logapache22.05.2010 bzw. Rechnung_neu übrig bleibt?


Ich hoffe, du weißt da auch noch einen Trick

Grüße
bastla
bastla 22.05.2010 um 22:49:47 Uhr
Goto Top
Hallo Knochen!

"_-_" kann nicht als Trennzeichen verwendet werden (da "for /f" nur einzelne Zeichen als Delimiter verarbeitet) - wenn allerdings immer nach dem ersten "-" getrennt werden soll, dann etwa so:
for /d %i in ("D:\Dein Backup-Ordner\*_-_*") do @for /f "tokens=1* delims=-" %a in ("%~nxi") do @for /f "tokens=* delims=_" %p in ("%b") do @echo ren "%i" "%p"
Grüße
bastla
Knochen
Knochen 22.05.2010 um 23:11:55 Uhr
Goto Top
Fantastisch, besser gehts nicht!
Danke!

Gruß