Hier erfahren Sie, wie Sie dies im Stapelverfahren tun können (falls Sie neugierig sind). Die große Einschränkung ist, dass es nicht funktioniert, wenn Sie Dateinamen mit mehr als einem Prozentzeichen haben, weil die Shell sie zu einer Variablen expandiert. Ich weiß nicht, wie man das sofort beheben kann.
Es beginnt in dem Verzeichnis, in dem sich das Skript befindet, und arbeitet rekursiv über alle Unterverzeichnisse.
@echo off
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%N in (`dir /s /b`) do (
set var=%%~nN
set var=!var:^&= !
set var=!var:%%= !
if not "!var!"=="%%~nN" (
if not exist "%%~dpN!var!%%~xN" (
echo "%%N" --^> "!var!%%~xN"
ren "%%N" "!var!%%~xN"
) else (
echo File "!var!%%~xN" ^(from %%N^) already exists.
)
)
)
Gibt z.B. eine Ausgabe wie diese aus:
C:\batch\schar>schar
"C:\batch\schar\Test%doc.doc" --> "Test doc.doc"
"C:\batch\schar\Test%doc.pdf" --> "Test doc.pdf"
File "Test doc.pdf" (from C:\batch\schar\Test&doc.pdf) already exists.
"C:\batch\schar\subdir\FILE%here" --> "FILE here"