需要与.bat脚本解析W3C日志帮助

问题描述:

我试图从W3C日志文件(有点像文本文件)获取值(IP地址)。这是我到目前为止,但没有运气:需要与.bat脚本解析W3C日志帮助

Set filename=ex%date:~-2,4%%date:~-10,2%%date:~-7,2%.log 

For /F "tokens=2 delims=: . " %%A in ('E:\WINDOWS\system32\LogFiles\MSFTPSVC6141885\%filename%') do (Set ip=%%A) 

和日志文件的样子:

 
# Software: Microsoft Internet Information Services 6.0 
# Version: 1.0 
#Date: 2009-01-10 20:58:16 
#Fields: time c-ip cs-method cs-uri-stem sc-status sc-win32-status 
#20:58:16 10.10.1.111 [25]USER anonymous 331 0 

所以IP地址是5日线第二列(10.10.1.111)

任何反馈将不胜感激!

+0

您可以缩进您的代码和日志文件每行4个空格吗?我认为格式化正在破坏正在呈现的一些数据。 – 2009-01-11 06:34:25

你试过Microsoft Log Parser吗?假设它支持W3C风格的开箱即用的日志文件。我不知道你在做什么,但是它可能比手工制作批处理文件更简单。

或者,安装AWK(例如从Cygwin)。甚至是Perl - 这是它的存在。

for线改成这样:

For /F "skip=4 tokens=2" %%A in (E:\WINDOWS\system32\LogFiles\MSFTPSVC6141885\%filename%) do (
    Set ip=%%A 
    goto :DONE 
) 
:DONE 
@echo IP = %ip% 
:: Continue script 

skip=4会忽略日志文件的前四行并开始解析第5位。 您需要goto停止解析文件中的其余行,否则您将旋转整个文件,并且ip将等于最后一行的第二个标记(可能是也可能不是IP地址)。

默认的分隔符是空格,所以你不需要用delims arg来改变它。您只需要第二个令牌,即IP地址。

由于您正在解析文件的内容,而不是文件名字符串,所以不需要用单引号括起文件名。如果文件名有嵌入空格,您将不得不使用此for行代替:

For /F "usebackq skip=4 tokens=2" %%A in ("E:\WINDOWS\system32\LogFiles\MSFTPSVC6141885\%filename%") do (