Hola tengo cierto problema haciendo un fichero batch.
Tengo 2 archivos de log de entrada en un servidor que comparar.
El formato es el siguiente:
user: pepa
password: hash
...
datos
...
logins: 5
el log se actualiza cuando un usuario ha entrado mas de una vez:
user: pepa
password: hash
...
datos
...
logins: 6
entonces para ver que usuarios han entrado reviso el ultimo log, pq si no ha entrado en el intervalo, no aparece, el problema es que aparecen muchos datos superfluos que me llenan el log de datos inutiles, solo necesito que me muestre
user: pepa
logins: 6
he usado fc pero no me sirve para nada ya que tambien me muestra la linea anterior y posterior a la linea que necesito
Comparando archivos s1.txt y S2.TXT
***** s1.txt
id: 38
user: pepa
pass: hash
***** S2.TXT
id: 38
user: pepa
pass: otro
*****
***** s1.txt
ip: xxxx
logins: 5
port: xxxx
***** S2.TXT
ip: xxxx
logins: 6
port: xxxx
*****
me muestra cosas que no necesito como los nombres de los archivos y los ***** , la salida deberia ser siempre el user y solo las lineas que han cambiado por ejemplo:
user: pepa
pass: otro
logins: 6
de esta forma de un vistazo puedo ver que el user pepa ha entrado y ha cambiado el pass.
He tratado de hacerlo con un fichero por lotes bastante cutre
@echo off
setlocal enabledelayedexpansion
:file1
set linecount=1
for /f "tokens=1 delims=" %%a in (s1.txt) do (
set line!linecount!=%%a
set /a linecount=!linecount!+1
)
set file1line1=%line1%
set file1line2=%line2%
set file1line3=%line3%
set file1line4=%line4%
set file1line5=%line5%
set file1line6=%line6%
set file1line7=%line7%
set file1line8=%line8%
:file2
set linecount=1
for /f "tokens=1 delims=" %%a in (s2.txt) do (
set line!linecount!=%%a
set /a linecount=!linecount!+1
)
set file2line1=%line1%
set file2line2=%line2%
set file2line3=%line3%
set file2line4=%line4%
set file2line5=%line5%
set file2line6=%line6%
set file2line7=%line7%
set file2line8=%line8%
echo File 1 text:
echo %file1line1%
echo %file1line2%
echo %file1line3%
echo %file1line4%
echo %file1line5%
echo %file1line6%
echo %file1line7%
echo %file1line8%
echo.
echo File 2 text:
echo %file2line1%
echo %file2line2%
echo %file2line3%
echo %file2line4%
echo %file2line5%
echo %file2line6%
echo %file2line7%
echo %file2line8%
rem pause
rem cls
if %file1line1%==%file2line1% goto next1
echo %file2line1%>>"logs.txt"
goto next1
:next1
if %file1line2%==%file2line2% echo caca
echo %file2line2%>>"logs.txt"
goto next2
:next2
if %file1line3%==%file2line3% goto next3
echo %file2line3%>>"logs.txt"
goto next3
:next3
if %file1line4%==%file2line4% goto next4
echo %file2line4%>>"logs.txt"
goto next4
:next4
if %file1line5%==%file2line5% goto next5
echo %file2line5%>>"logs.txt"
goto next5
:next5
if %file1line6%==%file2line6% goto next6
echo %file2line6%>>"logs.txt"
goto next6
:next6
if %file1line7%==%file2line7% goto next7
echo %file2line7%>>"logs.txt"
goto next7
:next7
if %file1line8%==%file2line8% goto done
echo %file2line8%>>"logs.txt"
goto done
:done
echo diferencias en logs.txt
pause
exit
pero no funciona, el trozo
echo %file1line1%
echo %file1line2%
echo %file1line3%
echo %file1line4%
echo %file1line5%
echo %file1line6%
echo %file1line7%
echo %file1line8%
me muestra las lineas correctamente pero cuando uso
if %file1line1%==%file2line1% goto next1
echo %file2line1%>>"logs.txt"
goto next1
Me dice no se esperaba 38==id: en este momento y se para, sospecho que esta comparando las palabras en lugar de las lineas.
Otra cosa que necesito es quitar el salto de linea de una linea, el script antes de nada invoca 2 comandos
date /T
time /T
para tener constancia de la fecha y hora de los cambios pero los coloca en lineas separadas
15/01/2011
16:18
necesitaria que quedase en una sola linea
15/01/2011 - 16:18
Gracias por la ayuda.