Вот как вы можете сделать это в пакетном режиме (если вам интересно).Большим ограничением является то, что если у вас есть имена файлов со знаком более одного процента, он не будет работать, потому что оболочка расширяет его до переменной.Я не знаю сразу, как это исправить.
Он начинается с любого каталога, в котором находится скрипт, и рекурсивно работает со всеми подкаталогами.
@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.
)
)
)
Например, выводит вывод следующим образом:
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"