Como habia comentado no soy
o experto en esto.
De momento sé como modificar cualquier cosa para adaptarla a mis necesidades o algo que quiero resolver completa o parcialmente mientras siempre funcione del mismo modo sin encontrarme con sorpresas. De ahí que pruebo todos los posibles eventos dónde algo puede salir mal. Sé que el BATCH tiene secuencias innecesarias pero modificarlas o quitarlas de momento no mejora nada.
Las modificaciones que le hiciste renombra solo algunos archivos, y aumenta 0's en otros infinitamente según el total de veces que ejecutes el BATCH, y también le quita el signo - (o guión medio) a los que le quitó ceros.
Elimina la secuencia de FINDSTR porque aunque no es innecesaria lo que hacia era filtrar archivos para que el Script tal como está no renombre otros archivos dada las modificaciones que se le pueden hacer. Aunque el sub-programa ("Clean1" o "Renombrar") igual trabaja sobre todos los archivos también le indico que filtre nuevamente con la secuencias de SET (
SET n=%n:-00000000=-00%).
La segunda etiqueta CLEAN2 no es necesario escribirla porque la secuencia FOR y FINDSTR pasado a CLEAN1 (expandiendo únicamente nombre y extensión de archivo, sin letra de unidad ni carpetas de ahí que no funcione recursivamente además que no le indico que almacen las rutas relativas o completas con DIR /S) igual ira de arriba hasta abajo ejecutando todo los comandos si encuentran algo que hacer.
Entonces si eliminas la secuencia
|FINDSTR /C:"-000" los archivos que tengan
-0 aumentan únicamente dos -00 para que todos los archivos estén en el mismo rango de 100, y los que se ecuentren en el rango -001*/-009* se mantengan, y los que se encuentren el rango -0001*/-0009* o más 0's bajan hasta -001*/-009*. De este modo si encuentra archivos que al renombrarlos quedarían iguales no renombra el archivo que tiene más -0's.
Lo modiqué nuevamente.
No en serio: lo revise
Explicación: Si encuentra 0's en los nombres de archivos los suprime añadiendo 00, y añade uno o dos 0 en los archivos con uno o dos 0's. Es decir que no los renombra sino es necesario.
Cita: @ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%f in ('DIR "*.JPG" "*.PNG" "*.BMP" "*.GIF" /B /A-D /ON ^') DO (Call:CLEAN "%%~nf" "%%~xf")
:CLEAN
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:00000000=00%
SET n=%n:0000000=00%
SET n=%n:000000=00%
SET n=%n:00000=00%
SET n=%n:0000=00%
SET n=%n:000=00%
SET n=%n:00=0%
SET n=%n:0=00%
SET n=%n:~1%
SET n=%n:~,-1%
IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF