This batch file can help, but it has some limitations. The filename characters = and % cannot be replaced (going from memory here) and an ^ in the filenames might be a problem too.
In this portion %newname: =_%
on every line in the lower block it replaces the character after :
with the character after =
so as it stands the bunch of characters are going to be replaced with an underscore.
Remove the echo
to activate the ren command as it will merely print the commands to the console window until you do.
It will only process the current folder, unless you add /s
to the DIR command portion and then it will process all folders under the current one too.
To delete a certain character, remove the character from after the = sign. In %newname:z=%
an entry like this would remove all z characters (case insensitive).
@echo off
for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a"
pause
GOTO:EOF
:next
set "newname=%~nx1"
set "newname=%newname: =_%"
set "newname=%newname:)=_%"
set "newname=%newname:(=_%"
set "newname=%newname:&=_%"
set "newname=%newname:^=_%"
set "newname=%newname:$=_%"
set "newname=%newname:#=_%"
set "newname=%newname:@=_%"
set "newname=%newname:!=_%"
set "newname=%newname:-=_%"
set "newname=%newname:+=_%"
set "newname=%newname:}=_%"
set "newname=%newname:{=_%"
set "newname=%newname:]=_%"
set "newname=%newname:[=_%"
set "newname=%newname:;=_%"
set "newname=%newname:'=_%"
set "newname=%newname:`=_%"
set "newname=%newname:,=_%"
echo ren %1 "%newname%