我试图在windows bacth中复制一个shell脚本。 我正在接近但我目前仍在尝试将日期时间标记子串起来输出时间。
@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
定义所以简而言之,我的脚本当前输出一个带有日志名称,日期/时间戳[20110314T103852]的csv和消息(验证:SUCCESS和SendResponse:响应消息。
但我想要的是它只将时间元素输出到第二列。
理想情况下,这个脚本需要计算每个元素的时间差,但上帝只知道如何(是的,这是一个问题)
感谢您提供任何帮助!
答案 0 :(得分:2)
关键在于延迟变量扩展
!VAR!而不是%var%,因为延迟扩展在行执行时扩展,扩展百分比在解析时扩展,在您的情况下,完整的for-block在执行之前首先被解析。
因此,行set time1=%time:~-6%
无法工作,因为它在设置time-var之前会扩展。
@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