buenos dias, soy nuevo en el mundo del bat y estoy necesitando de un bat que leea un texto "Ejemplo.txt" y me devuelva en otro texto "encontrado.txt" las lineas que contengan ciertas palabras. pero tambien las ultimas 5 lineas a esta linea inclusive.
ejemplo:
Nombre: Pepe
Edad: 32
Altura: 1.8
Peso: 75
Nombre: Jose
Edad: 20
Altura: 1.9
Peso: 75
Nombre: Juan
Edad: 340
Altura: 1.7
Peso: 85
aca deberia devolver todos las personas que tengan 75 KG.
al momento pude hacer que devuelva: "Peso:75" con :
type log.txt | find /i "Peso: 75"
pero necesito tambien las 3 lineas anteriores al peso para saber los demas datos.
es posible?
Trabajar con números no es una taréa agradable en Batch (No por dificil, sino por primitivo e ineficaz si no se hace al detalle... Bueno, eso lo hace más dificil supongo xD)... el code que he echo creo que ha quedado eficiente y sin errores, pero habría sido mejor codearlo en un lenguaje decente.
@Echo OFF
REM [PARÁMETROS]
REM KG ARCHIVO
Call :ElHacker.net 75 test.txt
Pause
Exit
:ElHacker.net
Setlocal enabledelayedexpansion
REM Eliminamos las lineas en blanco del archivo...
Type "%~2" | FINDSTR /I "[a-z]" > "%TEMP%\%~2"
Echo+
Echo: [ Peso: %~1 ] - Resultados: | MORE
ECHO:________________________________________________________________________________
For /F "Delims=:" %%X in ('findstr /I /N "Peso..%~1" "%TEMP%\%~2"') do (
Title Peso: %~1
Set /A "LINE=0"
Set /A "LAST=%%X+1"
Set /A "FIRST=!LAST!-4"
FOR /F "Tokens=*" %%# in ('Type "%~2"') do (
Set /A "LINE+=1"
IF NOT "!LINE!" EQU "!LAST!" (
IF "!LINE!" EQU "!FIRST!" (
Set /A FIRST+=1
ECHO %%#
)
)
)
ECHO:________________________________________________________________________________
)
Setlocal disabledelayedexpansion
Goto :EOF
Test.txt
Nombre: Pepe
Edad: 32
Altura: 1.8
Peso: 75
Nombre: paco
Edad: 11
Altura: 2,9
Peso: 95+
Nombre: cheguevara
Edad: 99
Altura: 7,9
Peso: 95
Nombre: chrisss
Edad: 1000
Altura: 2,19
Peso: 75
Output:
(http://img502.imageshack.us/img502/35/prtscrcapturec.jpg)
Saludos