Batch: Dateien Umbennen mit Ordner Name

S

stromberg123

Gast
Hallo,
ich möchte eine Batch Datei schreiben die Dateien umbenennt.
Sie soll in einem Ordner gestartet werden, darin befinden sich Ordner mit nur einer Ebene und darin wiederum Dateien.
Die Dateien sollen jetzt folgend umbenannt werden und im gleichen Ordner bleiben.
Ordnername - "alter Dateiname" (incl Endung).
Den Code den ich bis jetzt habe funktioniert leider nicht.
kann mir jemand weiter helfen? Bekomme es mit dem blöden Dateinamen einfach nicht hin (Fehlermeldung in Grafik 4)

Würde es gerne von Hand machen also ohne Hilfe von anderer Software.
Vielen Dank schonmal im Voraus

Grafik 1 zeigt mein Code übersichtlicher
Grafik 2 Ist-Zustand
Grafik 3 Soll-Zustand
Graffik 4 Ausgabe

Code:
::@echo off
set PFAD=%cd%
FOR /F "tokens=*" %%a in ('DIR %PFAD% /AD /B') DO (
echo %%a
  IF EXIST "%%~fa\*.*" (
	echo %%~fa
	For /F %%i in ('dir /B *.*') do (
		set Datei=%%~ni 
		REN "%%~fa\%%i" "%a% - %%~ni"
		)
	)
)
 

Anhänge

  • batch.PNG
    batch.PNG
    10,3 KB · Aufrufe: 264
  • dateien.PNG
    dateien.PNG
    22,6 KB · Aufrufe: 282
  • fertig.PNG
    fertig.PNG
    5,3 KB · Aufrufe: 231
  • ausgabe.PNG
    ausgabe.PNG
    27,9 KB · Aufrufe: 240
Beim zweiten FOR Befehl fehlt in jedem Fall ein tokens=; Abschnitt.

Damit verhinderst du, daß Leerzeichen als Trennzeichen genommen werden.
Die Fehlermeldung ist ja auch eindeutig, falscher Dateiname.

Genauer kann ich da jetzt nicht draufgucken, aber änder das schonmal und berichte dann wieder.

@Yuuri....eine Idee? :-)
 
danke für deine hilfe, stimmt da hab ich es vergessen.
die zeile sieht nun so aus, da jedoch beim Semikolon folgende Meldung erschien:
";"" kann syntaktisch an dieser Stelle nicht verarbeitet werden" habe ich es in ein * geändert.
Code:
		For /F "tokens=*" %%i in ('dir /B *.*') do (
		set Datei=%%~ni 
		REN "%%~fa\%%i" "%a% - %%~ni"
		)
	)

nun erhalte ich folgendes
Code:
E:\spielplatz>batch.bat

E:\spielplatz>set PFAD=E:\spielplatz

E:\spielplatz>FOR /F "tokens=*" %a in ('DIR E:\spielplatz /AD /B') DO (
echo %a
 IF EXIST "%~fa\*.*" (
echo %~fa
 For /F "tokens=*" %i in ('dir /B *.*') do (
set Datei=%~ni
 REN "%~fa\%i" " - %~ni"
)
)
)

E:\spielplatz>(
echo ordner 1
 IF EXIST "E:\spielplatz\ordner 1\*.*" (
echo E:\spielplatz\ordner 1
 For /F "tokens=*" %i in ('dir /B *.*') do (
set Datei=%~ni
 REN "E:\spielplatz\ordner 1\%i" " - %~ni"
)
)
)
ordner 1
E:\spielplatz\ordner 1

E:\spielplatz>(
set Datei=batch
 REN "E:\spielplatz\ordner 1\batch.bat" " - batch"
)
Das System kann die angegebene Datei nicht finden.

E:\spielplatz>(
set Datei=ordner 1
 REN "E:\spielplatz\ordner 1\ordner 1" " - ordner 1"
)
Das System kann die angegebene Datei nicht finden.

E:\spielplatz>(
set Datei=ordner 2
 REN "E:\spielplatz\ordner 1\ordner 2" " - ordner 2"
)
Das System kann die angegebene Datei nicht finden.

E:\spielplatz>(
set Datei=ordner 3
 REN "E:\spielplatz\ordner 1\ordner 3" " - ordner 3"
)
Das System kann die angegebene Datei nicht finden.

also datei kann wieder nicht gefunden werden, da er beim ersten ausführen immer den namen der bat datei nimmt und nicht der zu bearbeitenden datei und danach die ordner irgendwie hochzählt.... :confused_alt:
 
Also entweder du nutzt ren mit jeweils absolutem Pfad (also bei beiden Partition und kompletten Ordner inkl. Namen angeben) oder du wechselst vorher das Arbeitsverzeichnis und benutzt ren dann mti relativem Pfad. Würde ich jetzt nur raten, da ich nebenbei Borderlands spiele. ;)
 
hey danke Yuuri für deine Hilfe.
muss ich also nur die ren zeile ändern?
bekomme jetzt eine andere fehlermeldung, checke da grade nicht mehr durch.
würde mich echt sehr freuen wenn du mir helfen kannst

edit: hab mir des script so zusammen kopiert und mir ist gar nicht ganz bewusst wo ich einen relativen und wo ein relativen pfad verwende
achso stimmt ich lege ja ganz am anfang den absoluten pfad fest, aber verstehe es nicht wie ich dann die namen in den zwischenspeicher bekomme

der code
Code:
::@echo off
set PFAD=%cd%
FOR /F "tokens=*" %%a in ('DIR %PFAD% /AD /B') DO (
echo %%a
  IF EXIST "%%~fa\*.*" (
	echo %%~fa
		For /F "tokens=*" %%i in ('dir /B *.*') do (
		set Datei=%%~ni 
		REN "%%~fa\%%i" "%a% - %%~ni"
		)
	)
)

Ausgabe:
E:\spielplatz>batch.bat

E:\spielplatz>set PFAD=E:\spielplatz

E:\spielplatz>FOR /F "tokens=*" %a in ('DIR E:\spielplatz /AD /B') DO (
echo %a
IF EXIST "%~fa\*.*" (
echo %~fa
For /F "tokens=*" %i in ('dir /B *.*') do (
set Datei=%~ni
REN "%~fa\%i" " - %~ni"
)
)
)

E:\spielplatz>(
echo - - - batch
IF EXIST "E:\spielplatz\- - - batch\*.*" (
echo E:\spielplatz\- - - batch
For /F "tokens=*" %i in ('dir /B *.*') do (
set Datei=%~ni
REN "E:\spielplatz\- - - batch\%i" " - %~ni"
)
)
)
- - - batch

E:\spielplatz>(
echo - - batch
IF EXIST "E:\spielplatz\- - batch\*.*" (
echo E:\spielplatz\- - batch
For /F "tokens=*" %i in ('dir /B *.*') do (
set Datei=%~ni
REN "E:\spielplatz\- - batch\%i" " - %~ni"
)
)
)
- - batch

E:\spielplatz>(
echo - batch
IF EXIST "E:\spielplatz\- batch\*.*" (
echo E:\spielplatz\- batch
For /F "tokens=*" %i in ('dir /B *.*') do (
set Datei=%~ni
REN "E:\spielplatz\- batch\%i" " - %~ni"
)
)
)
- batch

E:\spielplatz>
Ergänzung ()

ist es eventuell einfacher mit einer temp text datei zum zwischenspeichern?
Ergänzung ()

mein neuer ansatz ist folgender, jedoch werden dabei einmal gesetzte werte nicht wieder freigegeben.
bekomme die werte aus dem Set einfach nicht mehr heraus
Code:
::@echo off

FOR /F "tokens=*" %%a in ('DIR %PFAD% /AD /B') DO (
ECHO %%a
	CD %%a/
	::dir
	for /R %%f in (*.mp3) do (
		set sDateiPfad=%%f
		REM echo %sDateiPfad%
			for %%i in ("%sDateiPfad%") do set sPATH=%%~di%%~pi  
			for %%i in ("%sDateiPfad%") do set sFILE=%%~ni%%~xi
		REM echo sFullname=%sDateiPfad%  
		REM echo sPATH=%sPATH%  
		REM echo sFILE=%sFILE%  
		REN %sFILE% "%a% - %SFILE%"
	)
	CD ..
)
Ergänzung ()

Code:
setlocal enabledelayedexpansion
schaffte abhilfe, letztes problem, mit leerzeichen und sonderzeichen.
bitte euch um hilfe

Code:
::@echo off
setlocal enabledelayedexpansion

FOR /F "tokens=*" %%a in ('DIR %PFAD% /AD /B') DO (
ECHO %%a
	CD %%a/
	::dir
	for /R %%f in (*.mp3) do (
		set sDateiPfad=%%f
		echo !sDateiPfad!
			for /F "tokens=*" %%i in ("!sDateiPfad!") do set sPATH="%%~di%%~pi"
			for /F "tokens=*" %%i in ("!sDateiPfad!") do set sFILE="%%~ni%%~xi"
		REM echo sFullname=%sDateiPfad%  
		REM echo sPATH=%sPATH%  
		REM echo sFILE=%sFILE%  
		REN !sFILE! "%%a - !sFILE!"
	)
	CD ..
)
 
Zuletzt bearbeitet:
Zurück
Oben