Avatar billede hansjacob Nybegynder
09. september 2004 - 08:21 Der er 8 kommentarer og
2 løsninger

DOS/Batch udtræk af sidste linie i fil

Hej

Jeg sidder og bøvler med et lille batch-script (på win XP platform), hvor jeg gerne vil hive sidste linie ud af en fil og indsætte den i en mail.

Det med mailen har jeg fundet ud af, men hvordan trækker jeg sidste linie ud af en fil?

Ex:

"sim.log" indeholder:
time step 10
time step 20
[en masse snak]
Succesfull run


...og jeg vil så gerne sende Strengen "Succesfull run" til en email.

Håber I kan hjælpe!

VH Jacob
Avatar billede Spotgun Seniormester
09. september 2004 - 08:54 #1
Jeg skulle mene det lille program "Tail" kan gøre det. Det virker på den måde, at du kan få det til at vise de sidste x-antal linier fra en fil. Syntaksen er således:

tail -0 filnavn.txt

hvis du vil dumpe outputtet til en text-fil, så gør sådan her:

tail -0 filnavn.txt > dump.txt

Tail.exe er en del af en bunke Microsoft server tools, du gratis kan hente her:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

Og hvis du skal sende mails fra en dos-prompt, så vil jeg anbefale Blat.
Det kan du hente her: http://www.blat.net/194/
Avatar billede hansjacob Nybegynder
09. september 2004 - 09:03 #2
Kan man også putte outputtet fra tail ind i en variabel?

Jeg har et mailprogram der hedder wMailTo. Syntaxen er
wMailTo -s"Output fra fil %o" etellerandet@noget.bø

Så nu mangler jeg bare at få output fra tail over i %o.

VH Jacob
Avatar billede Spotgun Seniormester
09. september 2004 - 09:13 #3
Godt spørgsmål, der må jeg sgu melde pas :/
Avatar billede bertelbrander Novice
09. september 2004 - 19:54 #4
Måske noget i stil med:

@echo off
setlocal
for /F "tokens=*" %%I in (sim.log) do @set YYY="%%I"

wMailTo -s%YYY% etellerandet@noget.bø

%YYY% bliver sat til at være sidste linie i filen + ""
Avatar billede hansjacob Nybegynder
10. september 2004 - 08:37 #5
bertelbrander -> Tak for hjælpen, det virker jo lige som det skal (vil du have point, må du lige lave et svar)!

spotgun -> Tak for forsøget!
Avatar billede hansjacob Nybegynder
10. september 2004 - 08:49 #6
To små tillægsspørgsmål:

1: Hvorfor virker følgende ikke, og hvordan kan jeg få det til at virke?
  @set YYY = tail -1 sim.log
(hvis jeg skriver "echo tail -1 sim.log" skriver den fint den streng, den skal)

2: Nu kunne jeg godt tænke mig at få flere linier med i selve mailen. Jeg tror det kan løses, hvis ovenstående løses. Så kunne jeg jo blot skrive tail -10 sim.log eller whatever. Men er der en bedre måde?
Avatar billede bertelbrander Novice
11. september 2004 - 01:30 #7
1: Hvis det er i en bat fil, ellers skal der bruges %I isf %%I
for /F "tokens=*" %%I in ('tail -1 sim.log') do set YYY=%%I

2: Man kan ikke lave en variabel der indeholder flere linier, men man kan sætte linierne sammen til en linie, f.ex adskilt af en ;

@echo off
setlocal
set YYY=
for /F "delims=" %%I in ('tail -6 whatever.txt') do call :ConCat "%%I"
echo %YYY%
goto :eof

:ConCat
Set YYY=%YYY%%~1;
Avatar billede hansjacob Nybegynder
13. september 2004 - 08:09 #8
Jeg lavede følgende script:

@echo off
setlocal
@set /a B=0

rem Find the last line for the subject of the mail
for /F "tokens=*" %%I in (%2) do (
  @set A=%%I
  set /a B+=1
)

set /a B-=80
if %B% LSS 1 set /a B=1

echo Log file: > tmp.log
for /F "delims=$ skip=%B%" %%I in (%2) do echo %%I>>tmp.log

wMailTo -s"%1 %A%" -ttmp.log  EMAIL@EMAIL.com

del tmp.log


Dvs finde den sidste linie samtidig med at jeg tæller, hvor mange linier der er i filen. Derefter flytte antal af linier - 80 (dvs de sidste 80) over i en temp fil, som jeg så sender til emailen.

Så pointene må jo nok gå til bertelbrander (hvis du lige vil svare).
Avatar billede bertelbrander Novice
13. september 2004 - 19:35 #9
Jeg vil helst ikke have point.
Avatar billede hansjacob Nybegynder
13. september 2004 - 19:43 #10
Så svarer jeg selv
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester