Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha

Iniciado por .:UND3R:., 1 Junio 2012, 05:15 AM

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

.:UND3R:.

Hola a todos, saben estoy un poco perdido por como empezar, pero les explicaré más menos que es lo que me gustaría hacer, a ver si me pueden echar una mano, tengo la siguiente lista como ejemplo archivo.txt:

juan   // 30-05-2012 o si quiero puedo ponerlo 31/05/2012 (me da igual)
pedro // 01-06-2012
maria // 12-12-2012

Me gustaría hacer un batch que al ejecutarlo, este tome la fecha actual y elimine las líneas que contentan una fecha anterior a esta, en este caso (hoy 31-05-2012), eliminaría a juan, quedando el archivo.txt de la siguiente forma:

pedro // 01-06-2012
maria // 12-12-2012

Me sería de gran ayuda, tengo un programa de control de accesos, el en un archivo de texto contiene las ID de los usuarios que pueden ingresar, y todos los días debo ver la fecha y buscar dentro de una inmensa lista cuales, cual de todos los usuarios ya está expirado, espero su ayuda, muchas gracias.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Eleкtro

Que bien poder ayudarte .:UND3R:. :)

No haré comentarios, En el bat te lo dejo todo muy bien explicado xD

Saludos.
Elektro H@cker / Pitoloko.






Fechas Killer xD.bat

@Echo OFF
Title By Elektro H@cker

:: By Elektro H@cker
:: Visita Foro.ElHacker.Net

Setlocal enabledelayedexpansion

REM yyyymmdd
Set "Hoy=%date:~6,4%%date:~3,2%%date:~0,2%"

Set "Archivo=test.txt"
If NOT Exist "%archivo%" (Exit /B 1) ELSE (Copy /-Y "%ARCHIVO%" "%ARCHIVO%_BACKUP" & CLS)

Echo Fecha actual [%DATE:/=-%]                   | MORE
Echo [+] Buscando usuarios con fecha expirada... | MORE
Call :Check "%archivo%"

:Check
REM %%a=Nombre, %%b=Fecha
For /F "tokens=1,2,* Delims=/" %%a in ('Type %1') do (
Set "Fecha=%%b"
Set "Fecha=!Fecha:-=!"
Set "Fecha=!Fecha: =!"

REM yyyymmdd
Set "Fecha=!Fecha:~4,4!!Fecha:~2,2!!Fecha:~0,2!"

REM Un pequeño control de errores por si se encuentra alguna fecha de MENOS (No de más) de 8 dígitos, O algún otro caracter que no sea un número. No lo uses si prefieres ganar tiempo de ejecución xD.
Echo "!Fecha!"| Findstr "^\"[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\"$" >NUL || (Echo Se ha encontrado una fecha NO valida y no se puede continuar | MORE & Echo Revise la linea de "%%a %%b" y repita el proceso. | MORE & Pause & Exit /B 1)

REM Un TEST para ir mostrando las comparaciones...
REM Echo %%a ^(!fecha!^) ^(!hoy!^)

If "!Fecha!" LSS "!Hoy!" (
Echo %%a           %%b
Set "Archivo=%~1.tmp"
Set "Nombre=%%a"
Set "Nombre=!Nombre: =.!"
Set "Fecha=%%b"
Set "Fecha=!Fecha:~1!"
Findstr /V "!Nombre!./.!Fecha!" "%Archivo%">"!Archivo!" || (Echo Ha ocurrido un error inesperado, No se pudo borrar al usuario "%%a %%b" & Pause)
Del /Q %1
Ren "%~1.tmp" "%~1"
Set "Archivo=%~1"
Set /A Count+=1
Goto :Break

REM Si te quieres ahorrar bastante tiempo de ejecución a costa de mostrar correctamente algunos datos, Usa esta forma.
REM Al encontrar una fecha expirada, Elimina todos los resultados de una sola vez.
REM
REM If "!Fecha!" LSS "!Hoy!" (
REM Echo Eliminando a usuarios con fecha: %%b
REM Set "Archivo=%~1.tmp"
REM Findstr /V "%%b" "%Archivo%">"!Archivo!" || (Echo Ha ocurrido un error inesperado, No se pudo encontrar la fecha "%%b" & Pause)
REM Del /Q %1 && Ren "%~1.tmp" "%~1" && Set "Archivo=%~1" && Set /A Count+=1
REM Goto :Break
)
)
Goto :Fin

:Break
Call :Check "!Archivo!"

:Fin
If defined COUNT (Echo+ & Echo [+] Se han borrado %Count% Elementos. | MORE) ELSE (Echo+ & Echo [+] No se han encontrado fechas expiradas. | MORE)
Pause
Exit



test.txt

indiana jones // 02-05-2012
juan   // 30-05-2012
pablo // 01-06-2012
pedro // 06-16-2012
maria // 12-12-2012
magan // 25-03-2012
mojon // 01-04-2012
Terminator // 31-01-2012
melchor // 05-02-2012



Output:









.:UND3R:.

Wuajajajajajajaja  ;-)
Muchísimas gracias EleKtro H@cker, era justo lo que necesitaba, ahora me has quitado una gran cantidad de tiempo. El código es perfecto, excelente, muchas gracias amigo, te debo una ;D

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

$Edu$