windows - indstil variabel fra token i en for loop

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at replikere et shell script i Windows Bacth.
Jeg nærmer mig, men i øjeblikket sidder fast på at forsøge at undertrykke et datetime-token for at udføre bare tiden.


    @echo off
echo."Location","Date Time","Result" > output2.csv
( for \%\%a in (z:logdir*.log) do (
for /f "tokens=1,2,3,4,5,6,7,8,9,10 delims=[+]" \%\%B in ('findstr /g:searchstrings.txt  ^< \%\%a') do (
set time=\%\%B
set time1=\%time:~-6\%
echo."\%\%a","\%\_time1\%","\%\%B","\%\%F") 
)
) >> output2.csv


logfilen indeholder mange poster, men dette script skal og trækker bare ud efter følgende linjer


[20110314T103852][EMVLib][5056][I000000]:  Verification: SUCCESS

[20110314T103902][CSV][3232][D000000]: SendResponse: Response message


Disse søgestrenge er defineret af filen searchstrings.txt


så kort sagt udskrives scriptet i øjeblikket et csv med lognavnet, dato/klokkeslæt [[20110314T103852]] og meddelelsen (Verifikation: SUCCESS og SendResponse: Response message.


men hvad jeg vil, er, at det kun skal udgive tidselementet til den anden kolonne.


Ideelt set skal dette script derefter udarbejde tidsforskellen for hvert element, men gud ved kun hvordan (ja det er et spørgsmål)


Tak for enhver hjælp på dette!

Bedste reference


Nøglen er her den forsinkede variabel ekspansion.

! Var! i stedet for\% var\%, da den forsinkede ekspansion udvides kun, hvis linjen udføres, udvides ekspansionsgraden i øjeblikket med parsering, i det tilfælde hvor den komplette for-blok analyseres først før den udføres.

Så linjen set time1=\%time:~-6\% kan ikke virke, fordi den udvider, før tiden er indstillet.


@echo off
setlocal EnableDelayedExpansion
echo."Location","Date Time","Result" > output2.csv
( 
  for \%\%a in (z:logdir*.log) do (
    for /f "tokens=1,2,3,4,5,6,7,8,9,10 delims=[+]" \%\%B in ('findstr /g:searchstrings.txt  ^< \%\%a') do (
      set time=\%\%B
      set time1=!time:~-6!
      echo."\%\%a","!time1!","\%\%B","\%\%F"
    ) 
  )
) >> output2.csv