Gå til innhold

lese siste linjer og oppdatere kontinuerlig i cmd vindu


Anbefalte innlegg

Hei!

 

Sitter her og lager noe greier, ettersom jeg ikke har så mye annet å gjøre atm.

Vel.

 

Så sitter jeg litt fast.

 

Jeg skal ha en tekst fil som bat filer skal rapportere til.

la oss kalle den rapport.txt

Da bruker jeg jo f.eks echo lol >> rapport.txt f.eks.

 

Men, det er ikke porblemet.

Jeg vil ha et cmd vindu oppe som automatisk får opp "lol" da, uten at jeg trenger klikke på noe.

 

Det jeg har kommet frem til som en løsning er dav følgende:

@echo off
:rapportering
cls
type rapport.txt
goto :rapportering

Det fungerer fint så lenge filen er liten.

Men la oss si at rapport.txt inneholder 50 linjer eller mer, da vil den bruke så lang til til å oppdatere at man nesten ikke ser de nyeste oppdateringene.

Den leser altså hele filen hver eneste gang.

 

Er det noen måte jeg klan få den til å lese fra f.eks bunnen og oppover bare 5 nyeste linjer? eller kanskje få den til å fortsette fra der den var kommet sistgang uten å laste hele dokkumentet på nytt?

Lenke til kommentar
Videoannonse
Annonse

Kan sikkert legge inn en litt delay, så den ikke flasher så mye.

Denne viser de 6 siste linjene i tekstfilen 123.txt

@echo off
:start
for /f "delims=~" %%a in (123.txt) do set a=%%a
for /f "delims=~" %%b in (123.txt) do IF not "%%b"=="%a%" set b=%%b
for /f "delims=~" %%c in (123.txt) do IF not "%%c"=="%a%" IF not "%%c"=="%b%" set c=%%c
for /f "delims=~" %%d in (123.txt) do IF not "%%d"=="%a%" IF not "%%d"=="%b%" IF not "%%d"=="%c%" set d=%%d
for /f "delims=~" %%e in (123.txt) do IF not "%%e"=="%a%" IF not "%%e"=="%b%" IF not "%%e"=="%c%" IF not "%%e"=="%d%" set e=%%e
for /f "delims=~" %%f in (123.txt) do IF not "%%f"=="%a%" IF not "%%f"=="%b%" IF not "%%f"=="%c%" IF not "%%f"=="%d%" IF not "%%f"=="%e%" set f=%%f

echo %f%
echo %e%
echo %d%
echo %c%
echo %b%
echo %a%
set a=
set b=
set c=
set d=
set e=
set f=
cls
goto start

Jeg hater slik kode, men det funker da :)

Endret av aklla
Lenke til kommentar

Fungerte den, men den laster uansett alt selv om man ikke ser det, som ressultarer i at man etter noen hundre linjer nesten ikke ser teksten :p (flashing)

Det kan fikses vet du :)

@echo off
:start
for /f "delims=~" %%a in (123.txt) do set a=%%a
for /f "delims=~" %%b in (123.txt) do IF not "%%b"=="%a%" set b=%%b
for /f "delims=~" %%c in (123.txt) do IF not "%%c"=="%a%" IF not "%%c"=="%b%" set c=%%c
for /f "delims=~" %%d in (123.txt) do IF not "%%d"=="%a%" IF not "%%d"=="%b%" IF not "%%d"=="%c%" set d=%%d
for /f "delims=~" %%e in (123.txt) do IF not "%%e"=="%a%" IF not "%%e"=="%b%" IF not "%%e"=="%c%" IF not "%%e"=="%d%" set e=%%e
for /f "delims=~" %%f in (123.txt) do IF not "%%f"=="%a%" IF not "%%f"=="%b%" IF not "%%f"=="%c%" IF not "%%f"=="%d%" IF not "%%f"=="%e%" set f=%%f

echo %f%
echo %e%
echo %d%
echo %c%
echo %b%
echo %a%
set a=
set b=
set c=
set d=
set e=
set f=
ping 22.22.22.22 -w 250>nul
cls
goto start

Lenke til kommentar

mhm, ser akseptabelt ut :p

En annen løsning hadde jo vert om man kunne f.eks slette alt utenom 10 siste linjene, om det er mulig da..?

 

Eller om man kan kopiere de 10 siste linjene f.eks til en ny tekst fil, vise tekst filen og deretter slette innholdet i tekstfilen for deretter å kopiere 10 siste linjene til tekstfilen og så vise dem igjen, det hadde kanskje vert en bedre metode?

I såfal, hvordan kopiere bare 10 siste linjene?

 

For det scriptet du la ut var litt i overkant rotete med alle IF not-ene :p

Eller kanskje dette kan gjøres lettere?

Endret av Dj_Evelen
Lenke til kommentar

Antagelig kan det gjøres lettere, med en eller to virkelig avanserte setninger, men jeg gidder ikke sitte i timesvis å lage noe som gjør det samme, bare ser litt penere ut...

 

Jeg ser ingen umiddelbar bedre måte å gjøre det på, mulig GeirGrusom stikker innom her senere og har noe bedre, om han gidder å lage noe da...

 

CMD/bat er latterlig dårlig på å håndtere tekstfiler.

I VB kan det antagelig gjøres en del bedre, men det er ikke mitt felt.

Endret av aklla
Lenke til kommentar

Batch egner seg kun til enkle ting.

Python er like enkelt som batch,men 100vis ganger kraftigere.

Python er kraftig og moderne programmringspråk,batch er det stikk motsatte.

 

Bare en rask demo av hvordan dette kan løses.

'''
#log.txt
This is first line.
This is second line.
This is third line.
This is fourth line.
This is last line.
'''

my_file = open('log.txt').readlines()[-1]
print my_file ##This is last line.

Som du ser enkelt og greit leser ut siste linje.

[-2:]vil lese de 2 siste linjer o.s.v..

 

Viss man vill skrive til en fil,når log.txt blir for stor.

'''
#log.txt
This is first line.
This is second line.
This is third line.
This is fourth line.
This is last line.
'''

#Make a new file,that we write last 2 line to.
#This happends if there are more than 3 lines in log.txt
file_3 = open('file_3.txt', 'w')

my_file = open('log.txt').readlines()
if len(my_file) > 3:  #More than 3--> lines or what we want.
   last_2_lines = my_file[-2:]
   file_3.write(''.join(last_2_lines))
   file_3.close()

print last_2

'''
#file3.txt
This is fourth line.
This is last line.
'''

Det er også en logging i standar biblioteket.

Hvor man kan gjøre alle mulige avanserte logging metoder.

Endret av SNIPPSAT
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...