@echo off
:: setting empty variables for use.
set n1=
set name=
set rname=
set namectl=
:: Creating Text file, for pasting into array
echo [ > list.txt
:: Creates Text file, for tracking which files get renamed. Currently removes 'Spaces' & ' - '
echo renamed files > Rlist.txt
:: Loops can be extended easily to include any file time
:: ~nx is 'name' & 'extension' for the vairable. without, the full variable would be 'c:\examplefolder\Examplename.jpg', and with it is 'Examplename.jpg'
for %%t in (*.jpg) do call :Deepend %%~nxt
for %%k in (*.png) do call :Deepend %%~nxk
:: End of list
echo ]>> list.txt
goto :eof
:: Prime & reseting of key variables between loops
:Deepend
set n1=/
set tep=%1^/
set name=%1
set namectl=n
:loop
:: Testing for 'problem' characters in a subloop setup and either inserting a special character or editing it out
if "%tep:~0,1%"==" " goto :edit
if ^%tep:~0,1%==^/ goto :Last
:: unneeded when escape characters arent needed. -if ^%tep:~0,1%==^. goto :Check
if ^%tep:~0,1%==^- goto :edit
if not %n1%==/ set n1=%n1%%tep:~0,1%
if %n1%==/ set n1=%tep:~0,1%
goto :chop
:Check
:: Inserts escape character, for problematic characters that can not be removed
if not %n1%==/ set n1=^%n1%^\^%tep:~0,1%
if %n1%==/ set n1=^\^%tep:~0,1%
goto :chop
:edit
::sets a rename flag, then edits the problem bit out of the listed name, providing feedback on in progress names to show working status
set namectl=y
set tep=%tep:~1%
echo processing File Name
echo %n1%~~
goto :loop
:Last
:: lasts step, puts the file into the list.txt & jumps to renaming file on the folder to remove problematic characters
:: use of %n1% should be wrapped in the proper formatting and including folders to pictures with the correct slash
echo %n1%>> list.txt
if %namectl%==y goto :rename
exit /b
:rename
:: sets/resets key renaming variables
set tname=%n1%*
set rname=
:Renamestart
::Skips to renaming if special character, that is forbidden in file system names exist (can be changed, though suggested to use a forbidden character file system that doesn't cause issues in batch, for windows no regex is needed as forloop sets the exact name and * is forbidden from use, allowing detection of special character to mark the end of the 'string'
:: if found skips to renaming action
if %tname%==* goto :renamed
::Subloops checking for problematic characters
if "%tname:~0,1%"==" " goto :renames
if ^%tname:~0,1%==^\ goto :renames
:: skips if problem characters, builds temp variable for new name
if not %rname%.==. set rname=^%rname%^%tname:~0,1%
if %rname%.==. set rname=^%tname:~0,1%
:renames
:: sets the cuts the used character out of the temporary variable, then restarts subloop
set tname=%tname:~1%
goto :Renamestart
:renamed
::renames file [windows specific] & exits the forloop to the next file
rename %name% %rname%
echo renamed %name% to %rname% >> Rlist.txt
exit /b
:chop
::chops the used character out of the variable & restarts the subloop
set tep=%tep:~1%
echo processing File Name
echo %n1%~~
goto :loop
:End
Comments
0 B
|👍
/👎