2009-05-24 9 views
14

Je suis en train d'écrire un gros fichier batch.Afficher le texte du fichier .txt dans le fichier batch

Il enregistre la date dans un fichier log.txt:

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

Il peut enregistrer plusieurs fois, sur plusieurs lignes. Maintenant, ce que je veux faire, c'est que le fichier batch affiche la dernière date/heure enregistrée depuis le fichier log.txt.

Comment?

+0

Bonne question. J'ai écrit mon premier script de lot un peu avancé juste hier, et j'aimais ça. La programmation par lots est amusante et un outil très puissant, mais je trouve aussi que certaines des tâches simples sont trop difficiles à réaliser. –

+1

Et la vraie réponse est bien sûr: si elle nécessite tout ce que le batch ne peut pas gérer dans une simple expression sur une seule ligne, il suffit d'écrire un petit programme. Il ne fait pas de mal;) – viraptor

Répondre

5

hmm .. juste trouvé la répondre. c'est plus facile alors je pensais. il a juste besoin d'un tas de choses:

@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 

Ainsi, il lit d'abord le fichier log.txt et le supprime. Après cela, il suffit d'obtenir un nouveau fichier (log.txt) avec la date & temps!

J'espère que cela aide les autres!

(le seul prob est que la première fois qu'il ne fonctionne pas, mais il suffit d'entrer la valeur aléatoire à log.txt.) (Ce problème est résolu et modifié.)

+2

Si cela résout vraiment votre problème, vous ne devez pas ajouter (>>) au fichier journal. Mais, sur la base de l'énoncé du problème original, il aurait semblé que vous vouliez conserver un historique, pas le supprimer à chaque fois. –

+0

cela n'écrira que la date et l'heure actuelles dans log.txt, mais ne récupérera rien du fichier journal d'origine, comme votre question initiale l'a demandé. – devio

+0

il fait dans les 2 premières lignes: echo .... type ... –

24
type log.txt 

Mais cela vous donnera le fichier entier. Vous pouvez le changer pour:

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

pour obtenir seulement le dernier.

+0

pourrait-il juste obtenir à partir du fichier log.txt pas la dernière ligne, mais la ligne ci-dessus? J'ai entendu quelque chose à propos de FINDSTR, mais je ne veux pas le trouver. –

+0

Je comprends ce que vous dites, mais il devrait le faire de temps en temps ... comme 100x ... autant que possible. Je veux publier cela et ce sera très bien. –

3

Utilisez le tail.exe de la Windows 2003 Resource Kit

+0

comment l'utiliser ??? –

+0

queue -1 log.txt – SqlACID

+0

fonctionne, mais ... je l'ai eu à travailler maintenant par moi-même, sans outils supplémentaires ... –

1

Essayez ceci: utiliser Rechercher pour parcourir toutes les lignes avec « date/heure actuelle », et écrire chaque ligne dans le même fichier:

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

Définir delims = à un caractère non pertinent dans les lignes de date/heure. Utilisez %% i dans les fichiers batch.

Explication (mise à jour):

Trouver extrait toutes les lignes de log.txt contenant la chaîne de recherche. Pour/f boucle sur chaque ligne, la commande (...) génère.

Comme écho> log-time.txt (simple>!) Log-time.txt écrase chaque fois qu'il est exécuté, seule la dernière ligne correspondante reste dans le journal de time.txt

+0

hmmm. pourriez-vous expliquer en détail ce qu'il fait? –

1

est ici une version qui doesn « t échouer si log.txt manque:


@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 je me demande quand est l'utilisation mais, voici deux snipets vous pouvez utiliser:

lastlog.cmd

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

changer le "echo .." ligne, mais la dernière fois du journal se trouve à % TimeStamp%.Aucun fichier temporaire utilisé, pas d'encombrement et réutilisable tel quel dans une variable.

D'autre part, si vous avez besoin de savoir cela dans votre code, et non d'un autre lot, changer votre enregistrement pour:

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

donc qui est utilisable plus tard la variable % TimeStamp% lorsque vous en avez besoin.

1

Un format d'horodatage pratique:

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

Voici une bonne date et le time code:

@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 

Sorties: La date est le dimanche 27 Septembre 2009 Heure actuelle: 3: 07

+0

Ne fonctionne pas sur 7. Get: 'La date est, 0-, 009 l'heure actuelle est: 12:00 –

+0

Cela pourrait être parce que mon Windows est dans une autre langue? –

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

Ceci est un lot permettant d'enregistrer la date et l'heure en tant que variable temporaire et de l'afficher. Dans l'urgence, je n'ai pas le temps d'écrire un script pour ouvrir un txt, peut-être plus tard. juste

1

régler l'heure et la date à des variables si ce sera quelque chose qui sera dans une boucle puis

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

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

je suggère rendre agréable et propre en mettant

@echo off 

dans fromt de tout ce qu'il se débarrasser de la merde C:/users/exemple/...

et mettre

cls 

après la :top pour effacer l'écran avant d'ajouter la nouvelle date et l'heure à l'affichage

+0

Mais ce n'est pas une réponse à la question pour obtenir la dernière ligne (s) du fichier journal – jeb

Questions connexes