elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha  (Leído 3,019 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha
« en: 1 Junio 2012, 05:15 am »

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.


En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha
« Respuesta #1 en: 1 Junio 2012, 09:14 am »

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

Código:
@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

Código:
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:



En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha
« Respuesta #2 en: 1 Junio 2012, 17:19 pm »

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
En línea


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


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha
« Respuesta #3 en: 1 Junio 2012, 17:54 pm »

No sos el unico que esta loco UND3R viste? jajaja
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines