установить переменную из токена в цикле for - PullRequest
1 голос
/ 01 апреля 2011

Я пытаюсь скопировать сценарий оболочки в Windows bacth.Я подхожу близко, но в настоящее время застрял при попытке подстановки токена datetime для вывода только времени.

    @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

файл журнала содержит много записей, но этот сценарий должен вытащить только следующие строки

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

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

Эти строки поиска определяются файлом searchstrings.txt

, так что вкратце мой скрипт в настоящее время выводит csv с именем журнала, отметкой даты / времени [20110314T103852] и сообщением (Проверка:SUCCESS и SendResponse: Ответное сообщение.

, но я хочу, чтобы он выводил только элемент времени во второй столбец.

В идеале этот сценарий должен затем рассчитать разницу во времени для каждогоэлемент, но бог знает только как (да, это вопрос)

Спасибо за любую помощь в этом!

1 Ответ

2 голосов
/ 01 апреля 2011

Ключ здесь - расширение отложенной переменной.
! Вар! вместо% var%, поскольку расширение с задержкой расширяется, только если выполняется строка, расширение процента увеличивается в момент синтаксического анализа, в вашем случае полный блок for сначала анализируется перед выполнением.
Таким образом, строка set time1=%time:~-6% не может работать, потому что она расширяется до того, как установлена ​​переменная времени.

@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
...