batch - modificar nombres de archivos, solo sacar las letras y dejar numeros

Iniciado por hernan35, 26 Diciembre 2012, 17:51 PM

0 Miembros y 1 Visitante están viendo este tema.

hernan35

hola, como estan? exelente la pagina, chicos les pregunto a ver si me pueden ayudar. necesito a un grupo de archivos txt, cambiarles el nombres de cada uno, pero con la salvedad, que solo necesito quitar las letras del nombre de cada archivo y si dejar el numero final , ejemplo se llama Remito Solar 1578.txt Remito alcorta 2458.txt y asi miles, el resultado seria 1578.txt 2458.txt se entendio? espero que si , saludos y espero puedan ayudarme , saludos
Hernan35

Segadorfelix

Hola hernan35, esto debería servir.
@echo off
Rem eliminador de letras de nombre de archivos
Rem Realizado por Segadorfelix
set "h="
for /F %%I IN ('DIR /B *.txt') DO (set /A "h=0"
set "ho="
call:nuke %%I
set "el=")
exit /B
:nuke
call set "nombreD=%%nombre:~%h%,1%%%
set /A "h=h+1"
IF ["%nombreD%"]==[""] IF DEFINED el (ren %nombre%.txt %ho%.txt && Goto:EOF) else (
Goto:EOF )
IF %nombreD% GTR 100 (Goto:nuke) else ( set "el=YS" && set "ho=%ho%%nombreD%")
echo %nombre%
echo %nombreD%
echo %ho%
goto:nuke


SaluDoss

Eleкtro

#2
El code de SegadorFelix no me ha funcionado en mi caso,
te dejo dos alternativas:


Código (dos) [Seleccionar]
@echo off

:: Este script elimina todas las letras dejando sólamente los números.
:: By Elektro H@cker

For %%# in (*.txt) Do (Call :Renamer "%%#")
Pause&Exit

:Renamer
Set "Filename= %~n1"
Set /A "Next+=1"
For /F %%# in ('Call Echo "%%FILENAME:~%NEXT%,1%%"') DO (
IF %%# EQU "" (GOTO :BREAK)
Echo "%%#" | FINDSTR "[0-9]" >NUL && (Call SET "RenamedFileName=%%RenamedFileName%%%%#")
GOTO :RENAMER
)
:BREAK
Call SET "RenamedFileName=%%RenamedFileName:"=%%"
(Call Echo "%~1" "%%RenamedFileName%%%~x1" & Call Ren  "%~1" "%%RenamedFileName%%%~x1") & (GOTO:EOF)





Código (dos) [Seleccionar]
@echo off

:: Este script elimina sólamente los caracteres que pongas en la variable "Set Chars=...".
:: By Elektro H@cker

For %%# in (*.txt) Do (Call :Renamer "%%#")
Pause&Exit

:Renamer
Set "Filename=%~1"
Set "Chars= a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K M N L O P Q R S T U V W X Y Z . , : - _ + [ ] { } ( ^) # @ ! = "
(For %%@ in (%CHARS%) Do (Call Set "Filename=%%Filename:%%@=%%")) & (Call Echo "%~1": "%%FILENAME%%%~x1" & Call Rename "%~1" "%%FILENAME%%%~x1") & (GOTO:EOF








Segadorfelix

#3
Gracias EleKtro H@cker, tenia dos errores.
1-Borre por error la variable nombre.
2-Solo sacaba letras de nombres sin espacios.
PD:Espero que no tenga mas bugs
PD2:Solo saca letras.
Código (dos) [Seleccionar]
@echo off
@echo off
Rem eliminador de letras de nombre de archivos
Rem Realizado por Segadorfelix
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set "h="
for /F "tokens=*" %%I IN ('DIR /B *.txt') DO (set /A "h=0"
set "ho="
call:nuke "%%I"
set "el=")
exit /B
:nuke
set "nombre=%~n1"
set "nombre=%nombre: =%"
ren "%~nx1" "%nombre%.txt" 2>NUL
:nukew
call set "nombreD=%%nombre:~%h%,1%%%"
set /A "h=h+1"
IF ["%nombreD%"]==[""] IF DEFINED el (ren "%nombre%.txt" "%ho%.txt" && Goto:EOF) else (
Goto:EOF )
IF %nombreD% GTR 100 (Goto:nuke) else ( set "el=YS" && set "ho=%ho%%nombreD%")
echo %nombre%
echo %nombreD%
echo %ho%
goto:nukew