Lower and remove special character of file name

Viewed 11

I want to create a script, which lower and remove special character multiple text files.

my files in folder like this:

- ⚡ Document.txt
- [Review] Test File.txt

i want remove special char of filename like this

- document.txt
- review test file.txt

i've tried like this, but only lower filename. how to remove special character?

@echo off
setlocal enableDelayedExpansion

pushd %currentfolder%

for %%f in (*) do (
   set "filename=%%~f"

   for %%A in (a b c d e f g h i j k l m n o p q r s t u w x y z) do (
      set "filename=!filename:%%A=%%A!"
   )
   ren "%%f" "!filename!" >nul 2>&1
)
endlocal

Before

Before

After

1 Answers
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET "sourcedir=u:\your files"
set "validchars=abcdefghijklmnopqrstuvwxyz1234567890. "

pushd "%sourcedir%"
FOR %%b IN (*) DO (
 set "newname="
 set "oldname=%%b"
 call :validate
 if /i "%%b" neq "!newname!" ren "%%~sb" "!newname!"
)

popd

GOTO :EOF

:validate
if not defined oldname goto :eof
set "c1=%oldname:~0,1%"
set "oldname=%oldname:~1%"
if "!validchars:%c1%=!" neq "%validchars%" set "newname=%newname%%c1%"
goto validate

Always verify against a test directory before applying to real data.

I predict it will have problems with some unicode characters and the usual suspects.

Related