Stapelverarbeitung. Massenumbenennung von Dateien im Ordner und allen Unterordnern

Stapelverarbeitung. Massenumbenennung von Dateien im Ordner und allen Unterordnern

Ich versuche, alle Dateien in Ordnern und Unterordnern umzubenennen, indem ich den Teil "-min" aus jedem Dateinamen mit Hilfe von Batch-Scripting unter Win7 entferne

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
FOR /R %%A in (.*)-min.png DO REN "%%A-min.png" "%%A.png"

Scheint so, als ob hier etwas mit dem SET-Parameter nicht stimmt, also versuche ich es folgendermaßen:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
    SET "oldname=%%G"
    SET "newname=!oldname:~0,-8!.png"
    REN "!oldname!" "!newname!"
)

aber ich bekomme nur Fehler. Wenn ich die letzte Anweisung aus der Schleife wiedergebe, erhalte ich die richtigen Pfade. Was übersehe ich?

Antwort1

Beim Umbenennen einer Datei können Sie den Ordnerpfad nicht in den Zielnamen aufnehmen. Sie können verwenden, %%~nxGum den Dateinamen und die Erweiterung ohne den Pfad abzurufen. Sie benötigen die Variable oldname nicht – Sie können einfach verwenden %%G. Sie können eine Zeile weglassen und die Zeichenfolgenmanipulation direkt in der REN-Anweisung durchführen.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
    SET "newname=%%~nxG"
    REN "%%G" "!newname:~0,-8!.png"
)

Beachten Sie, dass das obige Verfahren fehlschlägt, wenn ein beliebiger Teil des Dateipfads das !Zeichen enthält, da die Erweiterung der FOR-Variable vor der verzögerten Erweiterung erfolgt und daher den Wert beschädigt. Dies !kann beibehalten werden, indem sichergestellt wird, dass die verzögerte Erweiterung deaktiviert ist, wenn die FOR-Variable erweitert wird. Dazu muss die verzögerte Erweiterung innerhalb der Schleife ein- und ausgeschaltet werden.

@echo off
setlocal disableDelayedExpansion
cd F:\Mega.Pack-128x128\textures\
for /r %%G in (*-min.png) do (
  set "oldpath=%%G"
  set "newname=%%~nxG"
  setlocal enableDelayedExpansion
  ren "!oldpath!" "!newname:~0,-8!.png"
  endlocal
)

verwandte Informationen