错误级别检查在批处理文件中不起作用

时间:2014-07-01 22:41:08

标签: batch-file errorlevel

在下面的代码中,错误级别检查永远不会起作用。因此,如果发生故障,则不会发送电子邮件。 Powershell命令是正确的,并且在此构造之外工作。我也试过直接检查:如果%ERRORLEVEL%NEQ 0

但这也不起作用。

有什么想法吗?谢谢!

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^&            right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "dt=%mm%-%dd%-%yyyy%"

"LogParser.exe" "SELECT * INTO tblIisLog FROM \\iislogs\%dt%\*.log" -i:iisw3c -o:SQL -    oConnString:"Driver=SQL Server;Server=servername; Database=IISDB;Trusted_Connection=yes" -    createTable:ON
SET /a RC=%ERRORLEVEL%

IF %RC% NEQ 0
(

   powershell.exe -executionpolicy unrestricted -command "send-mailmessage -from     'me@abc.com' -to 'me@abc.com' -subject 'test' -body 'testing' -smtpServer 'smtpserv.com'"

)

2 个答案:

答案 0 :(得分:0)

假设LogParser.exe确实返回了错误级别,这应该可以正常工作并且更简洁:

LogParser.exe "SELECT blah, blah, blah..."
if errorlevel 1 powershell.exe -executionpolicy ...

答案 1 :(得分:0)

我正好阅读了一篇关于logparser的文章,声称它确实在错误时返回errorlevel非零。

我怀疑已经对用户变量errorlevel进行了分配。鉴于if errorlevel 1 ...构造对实际if errorlevel进行操作,errorlevel可行,而使用%errorlevel%的任何方法都会首先检查用户设置变量。为errorlevel或其密友(datetimerandom等分配任何值都可能导致意外结果(但在调试时可能很有用 - 您可以设置其中一个“变量”到已知值)

测试这一理论的真正简单的2秒方法(可能是也可能不是治愈方法)就是简单地包括这条线

set "errorlevel="

logparser电话之前。比任何技术分析和论证都要快得多。