2009-05-24 17 views
14

Estoy creando un archivo de proceso por lotes grande.Mostrar texto del archivo .txt en el archivo de proceso por lotes

Se registra la fecha en un archivo log.txt:

@echo off 
echo %date%, %time% >> log.txt 
echo Current date/time is %date%, %time%. 
@pause 
exit 

Se puede grabar varias veces, en varias líneas. Ahora lo que quiero hacer es que el archivo de archivo por lotes muestre la última fecha/hora registrada desde el archivo log.txt.

¿Cómo?

+0

Buena pregunta. Escribí mi primer script por lotes algo avanzado ayer y lo estaba disfrutando. El scripting por lotes es divertido y una herramienta muy poderosa, pero también encuentro que algunas de las tareas simples son demasiado difíciles de lograr. –

+1

Y la verdadera respuesta es, por supuesto: si requiere algo que el lote no pueda manejar en una simple expresión de una sola línea, simplemente escriba un pequeño programa. No duele;) – viraptor

Respuesta

5

hmm .. acaba de encontrar la responder. es más fácil de lo que pensaba. solo necesita un montón más de cosas:

@echo off 
if not exist log.txt GOTO :write 
echo Date/Time last login: 
type log.txt 
del log.txt 
:write 
echo %date%, %time%. >> log.txt 
@pause 
exit 

Por lo tanto, primero lee el archivo log.txt y lo elimina. ¡Después de eso, acaba de obtener un nuevo archivo (log.txt) con la fecha & vez!

¡Espero que esto ayude a otras personas!

(el único prob es que la primera vez que no funciona, pero luego simplemente entrar en el valor aleatorio en registro.txt.) (Este problema se resuelve y editado.)

+2

Si esto realmente resuelve su problema, no debe agregar (>>) al archivo de registro. Pero, en base a la declaración del problema original, parecería que usted quería mantener un historial, no eliminarlo cada vez. –

+0

esto solo escribirá la fecha/hora actual en log.txt, pero no recuperará nada del archivo de registro original, como lo hizo su pregunta original. – devio

+0

lo hace en las primeras 2 líneas: echo .... tipo ... –

24
type log.txt 

Pero eso le dará el archivo completo. Puede cambiarlo a:

echo %date%, %time% >> log.txt 
echo %date%, %time% > log_last.txt 
... 
type log_last.txt 

para obtener solo el último.

+0

¿podría obtener el archivo log.txt no la última línea, sino la línea de arriba? Escuché algo sobre FINDSTR, pero no quiero ENCONTRARLO. –

+0

entiendo lo que dices, pero debería hacerlo una y otra vez ... como 100x ... tanto como sea posible. Quiero publicar esto y será grandioso. –

3

Usar la tail.exe del Windows 2003 Resource Kit

+0

cómo usarlo ??? –

+0

cola -1 log.txt – SqlACID

+0

funciona, pero ... lo tengo que trabajar ahora solo, sin herramientas adicionales ... –

1

Prueba esto: utilizar Buscar para iterar a través de todas las líneas con "fecha/hora actual", y escribir cada línea en el mismo archivo:

for /f "usebackq delims==" %i in (`find "Current date" log.txt`) do (echo %i > log-time.txt) 
type log-time.txt 

Establezca delims = en un carácter no relevante en las líneas de fecha/hora. Use %% i en archivos por lotes.

Explicación (actualización):

Find extrae todas las líneas de registro.txt que contienen la cadena de búsqueda.

Para/f pasa por cada línea que genera el comando dentro (...).

Como eco> log-time.txt (solo>!) Sobrescribe log-time.txt cada vez que se ejecuta, sólo la última línea coincidente permanece en el diario de time.txt

+0

hmmm. ¿Podrías explicar en detalle qué hace? –

1

Aquí hay una versión que doesn 't fallar si no se encuentra log.txt:


@echo off 
    if not exist log.txt goto firstlogin 
    echo Date/Time last login: 
    type log.txt 
    goto end 

:firstlogin 
    echo No last login found. 

:end 
    echo %date%, %time%. > log.txt 
    pause 
1

Ok me pregunto ¿cuándo es el uso, pero, aquí hay dos snipets puede usar:

lastlog.cmd

@echo off 
for /f "delims=" %%l in (log.txt) do set TimeStamp=%%l 
echo %TimeStamp% 

cambiar el "eco .." línea, pero la última vez registro está dentro % de TimeStamp%.No se utilizan archivos temporales, no hay desorden y son reutilizables como lo es en una variable.

Por otro lado, si lo que necesita saber esto dentro de su código, y no de otro lote, cambia de registro para:

set TimeStamp=%date%, %time% 
echo %TimeStamp% >> log.txt 

para que la variable % de TimeStamp% se puede utilizar más tarde, cuando lo necesita.

1

Un formato de marca de tiempo útil:

%date:~3,2%/%date:~0,2%/%date:~6,2%-%time:~0,8% 
0

Aquí es una buena fecha y hora código:

@echo off 
if %date:~4,2%==01 set month=January 
if %date:~4,2%==02 set month=February 
if %date:~4,2%==03 set month=March 
if %date:~4,2%==04 set month=April 
if %date:~4,2%==05 set month=May 
if %date:~4,2%==06 set month=June 
if %date:~4,2%==07 set month=July 
if %date:~4,2%==08 set month=August 
if %date:~4,2%==09 set month=September 
if %date:~4,2%==10 set month=October 
if %date:~4,2%==11 set month=November 
if %date:~4,2%==12 set month=December 

if %date:~0,3%==Mon set day=Monday 
if %date:~0,3%==Tue set day=Tuesday 
if %date:~0,3%==Wed set day=Wednesday 
if %date:~0,3%==Thu set day=Thursday 
if %date:~0,3%==Fri set day=Friday 
if %date:~0,3%==Sat set day=Saturday 
if %date:~0,3%==Sun set day=Sunday 
echo. 
echo The Date is %day%, %month% %date:~7,2%, %date:~10,4% the current time is: %time:~0,5% 
pause 

Salidas: La fecha es el domingo, 27 de Setiembre de 2009 La hora actual es: 3: 07

+0

No funciona en 7. Obtenga: 'La fecha es, 0-, 009 la hora actual es: 12:00 –

+0

Esto podría deberse a que mi Windows está en otro idioma? –

0
@echo off 
set log=%time% %date% 
echo %log% 

Ese es un lote para guardar la fecha y la hora como una variable temporal y mostrarla. Tengo prisa, no tengo tiempo para escribir un guión para abrir un txt, tal vez más tarde.

1

acaba de establecer la fecha y la hora a las variables si va a ser algo que va a estar en un bucle y luego

:top 
set T=%time% 
set D=%Date% 

echo %T%>>log.txt 
echo %d%>>log.txt 
echo time:%T% 
echo date:%D% 
pause 
goto top 

sugiero por lo que es agradable y limpio, poniendo

@echo off 

en fromt de cada cosa que deshacerse de la horrible C:/usuarios/ejemplo/...

y poniendo

cls 

después de la :top para borrar la pantalla antes de que se añada la nueva fecha y hora de la pantalla

+0

Pero esta no es una respuesta a la pregunta para obtener la (s) última (s) línea (s) del archivo de registro – jeb

Cuestiones relacionadas