2009-05-24 30 views
14

Sto eseguendo lo script di un file batch di grandi dimensioni.Visualizza testo da file .txt in file batch

registra la data in un file log.txt:

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

E 'possibile registrare più volte, su diverse linee. Ora quello che voglio fare è che il file di file batch mostri l'ultima data/ora registrata dal file log.txt.

Come?

+0

Buona domanda display. Ieri ho scritto il mio primo script in qualche modo avanzato, e mi stavo divertendo. Lo scripting in serie è divertente e uno strumento molto potente, ma trovo anche alcune delle attività semplici troppo difficili da raggiungere. –

+1

E la vera risposta è ovviamente: se richiede qualcosa che batch non può gestire in una semplice espressione a riga singola, basta scrivere un piccolo programma. Non fa male;) – viraptor

risposta

5

hmm .. appena trovato il risposta. è più facile allora pensavo. ha solo bisogno di un po più roba:

@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 

Quindi prima legge il file log.txt e lo elimina. Dopo di ciò si ottiene solo un nuovo file (log.txt) con la data & tempo!

Spero che questo aiuti le altre persone!

(l'unico prob è che la prima volta che non funziona, ma poi basta inserire nel valore casuale a log.txt.) (questo problema è risolto e modificati.)

+2

Se questo risolve davvero il problema, non è necessario aggiungere (>>) al file di registro. Ma sarebbe sembrato, basandosi sull'affermazione originale del problema, che volevi conservare una cronologia, non cancellarla ogni volta. –

+0

questo scriverà solo la data/ora corrente su log.txt, ma non recupererà nulla dal file di registro originale, come richiesto dalla domanda originale. – devio

+0

lo fa nelle prime 2 righe: echo .... tipo ... –

24
type log.txt 

Ma questo vi darà l'intero file. Puoi cambiarlo in:

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

per ottenere solo l'ultimo.

+0

potrebbe semplicemente ottenere dal file log.txt non l'ultima riga, ma la riga sopra? Ho sentito qualcosa su FINDSTR, ma non voglio TROVARLO. –

+0

capisco cosa stai dicendo, ma dovrebbe farlo di volta in volta ... come 100x ... il più possibile. Voglio pubblicare questo e sarà molto bello. –

3

Utilizzare la tail.exe dal Windows 2003 Resource Kit

+0

come si usa ??? –

+0

tail -1 log.txt – SqlACID

+0

funziona, ma ... ho potuto farlo funzionare da solo, senza strumenti aggiuntivi ... –

1

Prova questo: utilizzare la funzione Trova per scorrere tutte le linee con "data/ora", e scrivere ogni riga allo stesso file:

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

Imposta delimi = a un carattere non rilevante nelle righe di data/ora. Usa %% i nei file batch.

Spiegazione (aggiornamento):

Ricerca estrae tutte le linee dalla log.txt che contengono la stringa di ricerca.

Per cicli/f ogni riga il comando interno (...) genera.

Come eco> log-time.txt (singolo>!) Sovrascrive ogni volta che viene eseguito log-time.txt, solo l'ultima riga corrispondente rimane in log-time.txt

+0

hmmm. potresti spiegare in dettaglio cosa fa? –

1

Ecco una versione che doesn 't fallire se log.txt manca:


@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 mi chiedo quando è l'uso, ma, qui ci sono due snipets si potrebbe usare:

lastlog.cmd

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

Modificare il "echo .." linea, ma l'ultima volta che registro è a % timestamp%.Nessun file temporaneo utilizzato, nessuna confusione e riutilizzabile come in una variabile.

D'altra parte, se avete bisogno di sapere questo all'interno del codice, e non da un altro lotto, cambiare la vostra registrazione per:

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

modo che la variabile % timestamp% è utilizzabile più tardi, quando ne hai bisogno.

1

Un comodo formato timestamp:

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

Ecco una buona data e l'ora di codice:

@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 

Uscite: la data è Domenica 27 settembre 2009 l'ora corrente è: 3: 07

+0

Non funziona su 7. Ottieni: 'La data è, 0-, 009 l'ora corrente è: 12:00 –

+0

Questo potrebbe essere perché il mio Windows è in un'altra lingua? –

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

Questo è un batch per salvare la data e l'ora come una variabile temporanea, e la visualizzazione. In fretta, non ho tempo per scrivere uno script per aprire un txt, forse più tardi.

1

basta impostare la data e l'ora alle variabili se sarà qualcosa che sarà in un ciclo poi

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

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

vi suggerisco che lo rende bello e pulito, mettendo

@echo off 

in fromt di ogni cosa è sbarazzarsi della scadente C:/Users/es/...

e mettendo

cls 

dopo la :top per cancellare lo schermo prima di aggiungere la nuova data e l'ora per

+0

Ma questa non è una risposta alla domanda per ottenere l'ultima riga del file di registro – jeb

Problemi correlati