ebimail
Goto Top

Batch Umbenennen- alten Namen teilweise übernehmen, Leerzeichen im Namen

Hey,

ich würde gerne das beim umbenennen meines Ordners das Datum aus dem alten Namen übernommen wird.
Das ganze funktioniert auch ganz gut, nur sobald die Ursprungsdatei nicht "aktuelle_Sicherung..." sondern "aktuelle Sicherung...", also mit Leerzeichen, heißt, steht in der %%i Variable nur noch "aktuelle". Also findet der Befehl RENAME auch den entsprechenden Ordner nicht.

Gibt es hierfür eine Lösung?

\aktuelle Sicherung 12.12.2012\...
\aktuelle_Sicherung_12.12.2012\...

@echo off
Setlocal EnableDelayedExpansion

FOR /F %%i in ('dir /b "aktuelle Sicherung*"') do (  
set Name=%%i && echo !Name! && rename !Name! alte_Sicherung_!Name:~19,10!
)
Liebe Grüße

Content-Key: 76571

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

Ausgedruckt am: 30.03.2024 um 05:03 Uhr

Mitglied: bastla
bastla 23.12.2007 um 21:30:29 Uhr
Goto Top
Hallo ebimail!

Da Leerzeichen (und Tab) als Standardtrennzeichen in einer "for /f"-Schleife gelten, musst Du explizit festlegen, dass kein Trennzeichen (delimiter) verwendet werden soll:
FOR /F "delims=" %%i in ('dir /b "aktuelle Sicherung*"') do (  
set Name=%%i && echo !Name! && rename !Name! alte_Sicherung_!Name:~19,10!
)

Grüße
bastla
Mitglied: Dani
Dani 23.12.2007 um 21:46:06 Uhr
Goto Top
Abend bastla,
wären im Falle von Leerzeichen in Ordnernamen bzw. Dateinamen die berühmten Anführungszeichen nicht noch am Anfang und Ende angebracht?!


Grüße
Dani
Mitglied: ebimail
ebimail 23.12.2007 um 21:56:52 Uhr
Goto Top
Leider gibt es in der RENAME Zeile immer einen Syntaxfehler?
Ich kann mir nicht erklären wieso? Den Ordnernamen erkennt er jetzt komplett...
FOR /F "delims=" %%i in ('dir /b "aktuelle Sicherung*"') do (  
set Name=%%i 
echo !Name!
rename "!Name!" "alte Sicherung - !Name:~21,10!"  
)
Edit:
Habe es hinbekommen! (oben ist die Lösung)

DANKE!
Mitglied: Biber
Biber 24.12.2007 um 09:31:18 Uhr
Goto Top
Moin ebimail,

kleiner Nachtrag der Vollständigkeit halber.
Wenn die Namenskonventionen so sind und bleiben wie beschrieben, dann geht es kürzer.
Zwar nicht ohne FOR-Anweisung, aber ohne Zwischenvariablen.

Beispiel direkt vom CMD:
for /f "tokens=1*" %i in ('dir /b /ad "aktuelleSicherung *"') do @echo Rename "%i %j" "olleSicherung %j"   
Ein @echo vor der simulierten Rename-Anweisung soll dem risikofreien Testen dienen.
Durch die DIR-Wildcards, die mir nur Verzeichnisse mit dem Aufbau "aktuelleSicherung-LEERZEICHEN-whatever" liefern, kann zwar eigentlich nichts schiefgehen, aber.... face-wink

Friedliche und erholsame Weihnachtstage
Biber