Batchdatei Rename Problem?
Hey, ich möchte ein Batchscript schreiben um alle Dateien in einem Ordner (& Unterordner) umzubenennen.
@echo off
set /p ort=Welches Verzeichnis ?
set /p vorsilbe=Welche Vorsilbe ?
echo.
echo Veraenderte Dateien:
for /R %ort% %%f in (.) do (
echo %%f
for /f "delims=" %%i in ('echo %%f') do set "varib=%vorsilbe%%%~nxi"
rename "%%f" "%varib%"
)
pause
Allerdings bekomme ich immer die Meldung
Dateiname existiert bereits, oder die Datei konnte nicht gefunden werden.
3 Antworten
Ich glaube der Fehler steckt in deiner zweiten for-Schleife. Zunächst fällt auf, dass du statt einfach nur den String %%f anzugeben diesen mit echo schreibst (das ist zwar unnötig, sollte aber noch kein Grund für einen Fehler sein). Da du die for-Schleife ausschließlich zum setzen einer Variablen verwendest, die du auch so setzen könntest, ist diese komplett unnötig. Vielmehr ist diese Variable sogar die Fehlerquelle: Sie ist zu Beginn noch nicht definiert, da cmd erst die Variablen durch ihre Werte ersetzt und dann anfängt den Code auszuführen. In deinem Fall ist das ganze aber leicht zu beheben (auch ohne DelayedExpansion, mit der Variablen verzögert ausgelesen werden können): Da du die Variable nur einmal brauchst, kannst du sie komplett weglassen und an der Stelle direkt ihren variablen Wert eintragen:
@echo off
set /p "ort=Verzeichnis: "
set /p "vorsilbe=Vorsilbe: "
echo.
echo Veraenderte Dateien:
for /R "%ort%" %%F in (.) do (
echo."%%F"
rename "%%~fF" "%vorsilbe%%~nxF"
)
pause
Habe mir jetzt keine Ordnerstruktur angelegt und getestet, müsstest mal eben selber schauen, ob es jetzt funktioniert.
PS: Nachdem du nur veränderte Dateien ausgeben willst, ist das hier vielleicht besser geeignet:
@echo off
set /p "ort=Verzeichnis: "
set /p "vorsilbe=Vorsilbe: "
echo.
echo Veraenderte Dateien:
for /R "%ort%" %%F in (.) do (
ren "%%~fF" "%vorsilbe%%~nxF" && echo."%%F"
)
pause
Danke, hat funktioniert !
Man muss allerdings statt (.) (*.*) schreiben.
du kannst die ja erstmal all durch nummerieren indem du alle im explorer markierst und bei gedrücker SHIFT taste auf umbenennen klickst und dann eine datei umbenennst, die anderen heißen dann alle NAME (1) und NAME (2) und so weiter.
Bevor man einen Fehler findet, muss man ihn vereinfachen. D.h. mache Dir ein Testverzeichnis und beginne damit, dass Du statt Platzhaltern den Variablennamen in die batch schreibst. Danach änderst Du ein Ding nach dem anderen in die Var.
Hast Du bei einer einzelnen Zeile / Var wieder ein Problem, dann freue ich mich, Dir zu helfen. Zur Zeit habe ich das Gefühl, Du sagst: "Ich will das nicht debuggen, mache es für mich."
Ich hab mir mit set mal die Variablen anzeigen lassen (hat bei allen Dateien geklappt (%%f=H:\test\datei.txt %varib%=Vorsilbe_datei.txt)) und dann bei rename manuell den Pfad und den Namen eingetragen (ohne Variablen (rename "H:\test\datei.txt" "Vorsilbe_datei.txt")), da hat rename auch funktioniert.
Nur mit Variablen funktioniert rename nicht. Kann es sein, dass rename keine Pfade aus Variablen nimmt ?
Gut gemacht!
Dass rename keine Vars nehmen würde, glaube ich nicht. Doch so ein Projekt habe ich noch nie umgesetzt (dafür ein paar tausend andere in zig Sprachen).
Probiere die Var-Übergabe jetzt Stück für Stück: Also einmal den Pfad schreiben, dann die Endung... Kannst auch mal ? und * probieren zum Testen.
Was mir allerdings sofort auffällt: In der Zeile mit den Klarnamen verwendet Du Anführungszeichen, in jenen mit der Variable nicht.
Da muss ich ihnen widersprechen. Ich glaub der Fehler liegt in der IF-Schleife und While Abfrage.