Título: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha Publicado por: .:UND3R:. 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. Título: Re: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha Publicado por: Eleкtro 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: (http://img269.imageshack.us/img269/7194/sdgsdg.png) Título: Re: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha Publicado por: .:UND3R:. 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 Título: Re: Crear batch que tome valores dentro de un .txt y borrarlo dependiendo dela fecha Publicado por: $Edu$ en 1 Junio 2012, 17:54 pm No sos el unico que esta loco UND3R viste? jajaja
|