Gå til innhold

Finne tid i et bat script


Anbefalte innlegg

Jeg har laget et script som komprimerer wav filer til ogg.

All prosessering går bra, men det er to ting som driter seg ut:

 

1, Logging: For hver fil den komprimerer skal den legge til en linje i loggen. Linjen skal inneholde tidspunkt. Til dette har jeg brukt

echo %DATE% %TIME% Failed, error=%lasterr% %filename% >> %errorlogfile%

Problemet er at %DATE% og %TIME% ikke endrer seg mens skriptet kjører. Altså, tidspunktet som logges er tidspunktet skriptet startet, ikke tidspunktet feilen oppstod! Hvordan kan jeg løse dette?

 

2: Hvordan sette timestamp for ogg-filene til å være det samme som de orginale wav-filene?

Lenke til kommentar
Videoannonse
Annonse

1) Du kan bruke date og time:

 

rem skrive ut datoen
date /t

rem skrive ut klokkeslett
time /t

 

Du kan også parse verdiene og formatere utskriften slik du ønsker:

 

@echo off

REM NB! Parsing av dato og klokkeslett avhenger av å ha regionalinnstillinger
REM     med norske dato- og klokkeslettformat. Hvis du bruker engelsk oppsett
REM     må du justere parsingen til nytt datoformat.


REM %dato% i formatet: åååå-mm-dd
FOR /f "tokens=1-3 delims=./ " %%a IN ('date /t') DO SET dato=%%c-%%b-%%a

REM %klokkelsett% til formatet: tt:mm
FOR /f "tokens=1-2 delims=: " %%d IN ('time /t') DO SET klokkeslett=%%d:%%e


echo [%dato% %klokkeslett%]  Failed...

 

 

2) Du må nok ha et tredjepartsverktøy for å gjøre dette. Jeg har kodet et lignende verktøy før så jeg skal se hva jeg kan grave ut av skuffen.

Lenke til kommentar

Hei, igjen. Jeg fant fram noe gammel kode som jeg modifiserte litt. Resultatet ble cpattrib som kopierer filattributter. Støttede attributter er: readonly, hidden, last accessed, last modified og created time.

 

Skriv cpattrib --help for liste over alle parametrene.

 

Eksempel:

 

cpattrib -i kildefil -o maalfil --all

 

... som kopierer alle attributtene cpattrib støtter fra kildefil til maalfil.

 

Kildekoden er lagt ved hvis noen er interessert. Programmet er ikke akkurat gjennomtestet, men det skal fungere greit ved "normal bruk".

 

 

cpattrib10.zip

 

Edit: rettet url til vedlegg

Endret av kjetil7
Lenke til kommentar

Når man bruker de forloopene i bat filere oppdaterer dem seg ikke selv om output fra time /t endrer seg!

 

Eksempel script: (trykk enter med ett minutts mellomrom, og se at bare den første linja med klokkeslett endrer seg)

 

@echo off
FOR /L %%i IN (1,1,4) DO (
date /t
time /t
FOR /f "tokens=1-3 delims=./ " %%a IN ('date /t') DO SET DATENOW=%%c-%%b-%%a
FOR /f "tokens=1-2 delims=: " %%d IN ('time /t') DO SET TIMENOW=%%d:%%e
echo timestamp: %DATENOW% %TIMENOW%
pause
)

Lenke til kommentar
Når man bruker de forloopene i bat filere oppdaterer dem seg ikke selv om output fra time /t endrer seg!

 

Eksempel script: (trykk enter med ett minutts mellomrom, og se at bare den første linja med klokkeslett endrer seg)

 

[...]

 

5899042[/snapback]

 

Jeg er redd du må utdype det her litt mer. Klokkeslettet oppdaterer seg som det skal hos meg.

 

Bra at du fikk cpattrib til å fungere :)

Lenke til kommentar

Slik ser output ut for meg:

11.04.2006
00:18
timestamp: 2006-04-11 00:18
11.04.2006
00:19
timestamp: 2006-04-11 00:18
Press any key to continue . . .
11.04.2006
00:19
timestamp: 2006-04-11 00:18
Press any key to continue . . .
11.04.2006
00:20
timestamp: 2006-04-11 00:18
Press any key to continue . . .

 

Ser timestamp linja har samme klokkeslett hele veien, mens output fra time /t oppdaterer seg.

Det samme skjer på alle 3 XP-pc'ne jeg har prøvd dette på.

Lenke til kommentar

Du har rett!

 

FOR-loopen oppdaterer ikke environment-variablene i løkka. Den tar bare med seg variablene som er satt ved løkkas start. Første gang du kjører løkka får du faktisk ikke opp noe timestamp i det hele tatt.

 

Tror ikke det er noe å gjøre med det. Vet ikke om det er en bug eller "expected behaviour", men det ser litt unødvendig å ha det slik ved første øyekast.

 

Så du må nok finne på noe annet enn den FOR-løkka. Hvis du ikke koder din egen FOR-kommando da.... ;)

Lenke til kommentar

Ja, det er det. Og det har jeg vist. Men du kan ikke bruke nestede FOR-looper slik du gjorde i det siste eksemplet ditt (tror vi misforstod hverandre litt...)

 

Det er flere måter å løse dette på. En måte er å legge inn de to FOR-loopene hver gang du skriver ut dato/klokkeslett. En annen kanskje bedre metode er å legge logging av tiden inn i en egen bat-fil og kalle opp den hver gang du trenger utskriften.

 

main.bat

@echo off

rem ## METODE 1
call update_timestamps.bat
echo [%dato% %klokkeslett%]  Start

echo Do some work...
echo Wait 60 seconds and press any key to continue...
pause >nul

rem ## METODE 2
call print_log_message.bat End

 

update_timestamps.bat

@echo off

REM %dato% i formatet: åååå-mm-dd
FOR /f "tokens=1-3 delims=./ " %%a IN ('date /t') DO SET dato=%%c-%%b-%%a

REM %klokkelsett% til formatet: tt:mm
FOR /f "tokens=1-2 delims=: " %%d IN ('time /t') DO SET klokkeslett=%%d:%%e

 

 

print_log_message.bat

@echo off
call update_timestamps.bat
echo [%dato% %klokkeslett%] %*

 

 

Jeg vil tro du ser tråden her...

 

 

Ellers kan du alltids oppdatere dato og klokkeslett manuelt hver gang:

 

main.bat

@echo off

FOR /f "tokens=1-3 delims=./ " %%a IN ('date /t') DO SET dato=%%c-%%b-%%a
FOR /f "tokens=1-2 delims=: " %%d IN ('time /t') DO SET klokkeslett=%%d:%%e
echo [%dato% %klokkeslett%]  Start

echo Do some work...
echo Wait 60 seconds and press any key to continue...
pause >nul

FOR /f "tokens=1-3 delims=./ " %%a IN ('date /t') DO SET dato=%%c-%%b-%%a
FOR /f "tokens=1-2 delims=: " %%d IN ('time /t') DO SET klokkeslett=%%d:%%e
echo [%dato% %klokkeslett%]  End

 

En siste måte å gjøre dette er å bruke GOTO med labels, men det kan fort bli kluss i denne sammenhengen.

Endret av kjetil7
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...