尝试使用logparser执行批处理文件时出现意外错误。
我知道冒号在批处理文件中用作标签,而双冒号用于评论。但是当冒号出现在这样的开关中时会发生什么:
for /f "tokens=1,2 delims=," %a in (servers.txt) do "C:\Program Files\Log Parser 2.2"\logparser -i:EVT "SELECT TimeGenerated,EventID,EventType,SourceName,ComputerName,Message FROM \\%a\%b WHERE TimeGenerated > TO_TIMESTAMP(SUB(TO_INT(SYSTEM_TIMESTAMP()),118800))AND EventID BETWEEN x AND y ORDER BY TimeGenerated DESC" -stats:OFF
如果我直接运行logparser命令,它运行正常。但是在批处理文件中运行会给出:
“此时EVT出人意料。”我如何让cmd解释为“-i:EVT”,因为它将在批处理文件之外?
我如何逃避?
我试过-i ^:EVT和-i ^^:EVT,两者都不起作用。
答案 0 :(得分:0)
当您尝试从脚本运行时,您需要复制For
变量%
字符,请尝试以下操作:
for /f "tokens=1,2 delims=," %%a in (servers.txt) do "C:\Program Files\Log Parser 2.2"\logparser -i:EVT "SELECT TimeGenerated,EventID,EventType,SourceName,ComputerName,Message FROM \\%%a\%%b WHERE TimeGenerated > TO_TIMESTAMP(SUB(TO_INT(SYSTEM_TIMESTAMP()),118800))AND EventID BETWEEN x AND y ORDER BY TimeGenerated DESC" -stats:OFF
如果您的原始代码运行正常从CMD运行,则修改将从脚本运行,无论如何我会建议您在此部分"C:\Program Files\Log Parser 2.2"\logparser
中包含错误的目录路径,并且还要避免解释您可以考虑在DO
关键字之后对命令进行合并的错误,例如:Do (This)