Script zum Umbenennen von Dateien

@Raijin Was muss ich bitte oben im Script ändern, damit die Unterordner mitberücksichtigt werden? :-)
 
Die Verzeichnisse rekursiv durchsuchen lassen, in dem man den Parameter /r (für recurse) setzt:

Code:
if %unterordner%==ja (
    for /f /r "delims="
 
@NotNerdNotDau : Ich habe /r hinzufügt (siehe letzte Fassung vom Code). Merkwürdigerweise funktioniert danach das Ersetzen in aktivem Verzeichnis als auch im Unterverzeichnissen nicht mehr.

Code:
@echo off
setlocal enabledelayedexpansion
color 3f
chcp 65001
cls

echo Script zum Umbenennen von Dateien
echo ------------------------------------------------------------

set /P frage="Bitte volständigen Pfad eingeben: "
set /P ext="Bitte die Dateiendung eingeben (Beispiel pdf): "
set /P suchen="Suchen: "
set /P ersetzen="Ersetzen: "
set unterordner=nein
set /P unterordner="Unterordner berücksichtigen (ja oder nein): "

set "pfad=%frage%"
set "dateiendung=%ext%"
set "suchtext=%suchen%"
set "ersetztext=%ersetzen%"

if %unterordner%==ja (
    for /f /r "delims=" %%f in ('dir /s /b /a-d "%pfad%\*.%dateiendung%" 2^>nul') do (
        set "File=%%~nxf"
            echo %%~f
        ren "%%~f" "!File:%suchtext%=%ersetztext%!"
    )
)

if %unterordner%==nein (
    for %%f in (%pfad%\*.%dateiendung%) do (
        set "File=%%~nxf"
            echo %%~f
        ren "%%~f" "!File:%suchtext%=%ersetztext%!"
    )
)

%SYSTEMROOT%\EXPLORER.EXE "%frage%"
 
Aus meiner Sicht ergibt das mit /r auch gar keinen Sinn, weil für die Rekursion eigentich /s im dir-Befehl verantwortlich ist.

Und ja, es funktioniert nicht mehr, weil es zu einem Syntax-Fehelr kommt. Warum? Weil /r eine Angabe eines Verzeichnisses erwartet.

Bei mir funktioniert es im Übrigen ohne /r.

"funktioniert nicht" ist immer eine tolle Fehlerbeschreibung.
 
Zuletzt bearbeitet:
Ja gut, das mit dem /r war nur so eine Idee von mir ins Blaue. Der steht aber sehr wohl für "recurse".
Da muss wohl tatsächlich noch eine Verzeichnisangabe dahinter.
Rename files within subdirectories
By default REN with a wildcard will only rename the files in a single folder, to recurse down into sub folders use a FOR /R command, after first changing to the top level directory.

e.g. A batch file to rename all .LOG files to .TXT in the 'C:\demo\' folder and all sub-folders:

CD C:\demo\
For /R %%G in (*.LOG) do Echo REN "%%G" "%%~dpnG.TXT"
Remove the echo to run this for real
Quelle: https://ss64.com/nt/ren.html

Ich bin viel zu lange raus aus Batch und pflege solche oder ähnliche Vorhaben mit PowerShell umzusetzen.

Es gibt sicher unzählige Codebeispiele im Netz, da kann man sich ruhig mal auf die Suche begeben und wird dann sehr schnell fündig.

Hier unter anderem:
https://stackoverflow.com/questions/70674829/renaming-folders-using-batch
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank! Jetzt funktioniert es.
 
  • Gefällt mir
Reaktionen: NotNerdNotDau
Zurück
Oben