我正在处理批处理脚本,我正在使用Log Parser解析IIS日志。 所以,我在这里有两个问题:
Q1。我想要的是,不要看到在文本文件中写入用户名的条目。因此,可以更新该文本文件而无需担心代码语法。
换句话说,不是将每个用户名(大约30-50)放在' WHERE'条款使用' AND'再次&再次,我将有一个包含用户名列表的文本文件。
代码示例:
"LogParser.exe" -i:csv "SELECT DISTINCT date, cs-username, clientun, cs-uri-stem FROM D:\temp.csv WHERE NOT cs-username IN ('NULL';'abc';'def';'hij';'and_so_on')" >D:\final_output.txt -o:NAT -rtp:-1
我试图通过子查询首先执行此操作,但似乎在日志解析器中不支持它。我发现OPENROWSET是一个解决方案here,但这对我来说似乎不起作用,或者我可能无法让它如何运作。 我找到的其他解决方案是针对SQL而且不适用于日志解析器。
Q2。我希望在提到的日期之间读取日志。所以,我用YYYY-MM-DD格式从用户那里开始和结束日期并将它们放入查询
"LogParser.exe" -i:iisw3c "SELECT DISTINCT cs-username, REVERSEDNS(C-IP), date, cs-uri-stem, FROM \logs\location\* WHERE date BETWEEN %date_1% AND %Date_2%" >D:\temp.csv -o:csv
我得到的错误是:
错误:WHERE子句:语义错误:BETWEEN运算符的左区间("' 2016-02-15'")与操作数的类型不同(" date& #34)
请注意,Q2生成的输出文件在Q1中用作输入。
答案 0 :(得分:0)
Q1:不使用logparser过滤数据,而是使用findstr
和/g:file /v
开关来过滤输入文件或输出行(取决于具体情况)
Q2:字符串不是时间戳。使用
BETWEEN TO_TIMESTAMP('%date_1%','yyyy-MM-dd') AND TO_TIMESTAMP('%date_2%','yyyy-MM-dd')