e2ek1el
Goto Top

Batch Rename Problem

Hallo,
ich habe Probleme mit dem rename-Befehl.

Ich würde gerne alle Dateien in einem Verzeichnis umbennen. Dies scheint aber nicht mit dem Rename-Befehl möglich zu sein.

XXX_de_.htm in XXX_00.htm

dies hatte ich versucht über

ren *_de_.htm *_00.htm

umzubennenen. Leider reichen meine Batch-Kenntnisse nicht für eine for-Schleife aus.
Das Problem ist das diese Dateien nicht nur einmalig umbennant werden müssen, dies muss also als Batch-Programm möglich
sein.
Kommentar vom Moderator Biber am Sep 07, 2009 um 10:41:02 Uhr
einem Verzeichnis umbennen
Set /a rgc+=1
--> #612
...umzubennenen. Leider reichen meine Batch-Kenntnisse
Set /a rgc+=1
--> #613

Content-Key: 124355

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

Printed on: April 23, 2024 at 15:04 o'clock

Member: Woolfsmann
Woolfsmann Sep 07, 2009, updated at Oct 18, 2012 at 16:39:15 (UTC)
Goto Top
Hi,

wurde hier schon oft besprochen, ich hab nicht so ganz genau reingeguckt aber z.b. String aus Dateinamen abfragen und ändern per Batch hört sich passend an

gruß
Member: E2EK1EL
E2EK1EL Sep 07, 2009 at 11:11:36 (UTC)
Goto Top
Vielen Dank,
hatte tatsächlich diesen Post schon gesehen und damit probiert es zu lösen, wie gesagt meine Kenntnisse sind beschränkt...

@echo off & setlocal
set "Dateien=H:\bw-export\*_de_.htm"  


for /f "delims=" %%i in ("%Dateien%") do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "T1=_00"  

ren %1 "%T1"  
goto :eof
Member: Biber
Biber Sep 07, 2009 at 11:34:36 (UTC)
Goto Top
Moin E2EK1EL,

angenommen, die bisherigen Quell-Dateinamen enthalten als ersten Unterstrich im Namen den vor dem Suffix "_de".
@echo off & setlocal
set "Dateien=H:\bw-export\*_de_.htm"  
  
for /f "delims=" %%i in ("%Dateien%") do call :ProcessFile "%%i"  
goto :eof
 
:ProcessFile
FOR /F "delims=_" %%a in ("%~n1") DO ren "%~1" "%%a_00.htm"  
goto :eof
[ungetestet]

Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Sep 07, 2009 at 11:36:44 (UTC)
Goto Top
Hi E2EK1EL,

das in dem rename kommt daher, weil

*_00.htm
den letztzen Unterstrich in der Originaldatei sucht und alles was davor steht als preName Auflöst.
wenn kein Unterstrich gefunden wird, wird der Komplette Name Aufgelöst.

also auch noch _de in den preName-Teil einfügt.

daher hat Dein rename in etwa so umbenannt
*_de_00.htm

Gruß Phil
Member: pieh-ejdsch
pieh-ejdsch Sep 07, 2009 at 11:48:27 (UTC)
Goto Top
da würde ich es doch so machen wenn Die anzahl U-striche mehr ist.

@echo off & setlocal
set "Dateien=H:\bw-export\*_de_.htm"  
  
for /f "delims=" %%i in ("%Dateien%") do set "name=%%i" call :ProcessFile  
goto :eof
 
:ProcessFile
ren "%name%" "%name:de_.htm=%00.htm"  
Member: E2EK1EL
E2EK1EL Sep 07, 2009 at 11:51:53 (UTC)
Goto Top
Danke Biber,

es funktioniert aber leider nur für eine Datei pro Aufruf.

Alls fehler bekomme ich nach dem Aufruf für jede Datei diese Meldung:

"Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden."

Was bedeutet das "%~n1"
FOR /F "delims=_" %%a in ("%~n1") DO ren "%~1" "%%a_00.htm"   
Member: E2EK1EL
E2EK1EL Sep 07, 2009 at 11:55:57 (UTC)
Goto Top
Das ist einleuchtend! Danke.. habe mir sowas dann schon gedacht.

Zu deinem Beispiel-Code muss sagen das er gar nicht tut und auch keine Fehlermeldung ausgibt...
Member: pieh-ejdsch
pieh-ejdsch Sep 07, 2009 at 12:08:34 (UTC)
Goto Top
ahhh der bring bestimmt einen syntaxfehler und das & vor dem Call fehlt - sorry

@echo off & setlocal
set "Dateien=H:\bw-export\*_de_.htm"  
  
for /f "delims=" %%i in ("%Dateien%") do (set "name=%%i" & set "um=%%~nxi" & call :ProcessFile )  
goto :eof
 
:ProcessFile
if not exist "%name:de_.htm=%de_.htm" goto :eof  
ren "%name%" "%um:de_.htm=%00.htm"  

diesmal kannste die Batch auch mehrmals ausführen falls neue Dateien dazukommen.
Member: E2EK1EL
E2EK1EL Sep 07, 2009 at 12:16:39 (UTC)
Goto Top
diesmal kannste die Batch auch mehrmals ausführen falls neue
Dateien dazukommen.

Jetzt habe ich zwei Varianten face-smile

Leider funktioniert es auch nur zur hälfte, es benennt eine Datei richtig um, danach kommt wieder die gleiche Fehlermeldung:

Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.


für jede weitere vorhandene Datei!


Vielen Dank für deine schnelle Hilfe!
Member: pieh-ejdsch
pieh-ejdsch Sep 07, 2009 at 12:24:54 (UTC)
Goto Top
oh - liegt warscheinlich daran, dass heut Montag ist face-wink

@echo off & setlocal
pushD "H:\bw-export"  

for /f "delims=" %%i in ('dir /b "*_de_.htm"') do (set "name=%%i" & call :ProcessFile )  
popD
goto :eof

:ProcessFile
ren "%name%" "%name:de_.htm=%00.htm"  

mal jetzt fürs Verzeichnis
Member: E2EK1EL
E2EK1EL Sep 07, 2009 at 12:30:19 (UTC)
Goto Top
Habe grade versucht es über ein copy oder move befehl selbst hinzukriegen, geklappt hat es aber nicht!

Vielen Dank für deine Hilfe. Chapeau!

Ich versuche gerade nur noch deinen Code zu verstehen...
Member: pieh-ejdsch
pieh-ejdsch Sep 07, 2009, updated at Oct 18, 2012 at 16:39:15 (UTC)
Goto Top
01. setlocal = ausfühliche Erklärung im Tutorial Batch Umgebungsvariablen
02. pushD = setze den aktuellen Pfad und merke den alten

04. for = ist eine ForSchleife vllt mach ich da mal en TUT

05. popD = komm wieder in den alten pfad zurück

06. goto :eof = Beende die Aktuelle Routine

09. findest Du auch antworten für UmgebungsVariablen im TUT

Gruß Phil