需要有关.bat脚本的帮助来解析W3C日志

时间:2009-01-11 06:32:13

标签: ftp scripting w3c batch-file

我试图从W3C日志文件中获取值(IP地址)(有点像文本文件)。这是我到目前为止,但没有运气:

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)

任何反馈都将不胜感激!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

将您的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将忽略日志文件的前四行并开始解析第五行。 您需要goto停止解析文件中的其余行,否则您将遍历整个文件,ip将等于最后一行的第二个标记,这可能是也可能不是IP地址。

默认分隔符是空格,因此您无需使用delims arg更改此分隔符。您只需要第二个令牌,即IP地址。

您不需要将文件名括在单引号中,因为您正在解析文件的内容,而不是文件名字符串。如果文件名包含嵌入的空格,则必须使用此for行:

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