2012-05-30 50 views
0

我的代码如下:命令提示符ERRORLEVEL问题

CALL:ECHOCOLOR "Executing on server:[S059D526\TCH] db:CS filename:[9990294_UPDATE_Concessions.sql]." Cyan 
SET CURRENT_SCRIPT="9990294_UPDATE_Concessions.sql" 
if not exist "9990294_UPDATE_Concessions.sql" (
    CALL:ECHOCOLOR "skipping execution of file [9990294_UPDATE_Concessions.sql]. Possibly it was renamed because it has already ran" Yellow 
) 
if exist "9990294_UPDATE_Concessions.sql" (
    CALL:ECHOCOLOR "executing script [9990294_UPDATE_Concessions.sql]" Cyan 
    sqlcmd -V 1 -r1 -E -S S059D526\TCH -d "CS" -i "9990294_UPDATE_Concessions.sql" -o "9990294_UPDATE_Concessions.sql.run_20120508_12_19_36.log" 
) 
CALL:ECHORESULT "result [OK=0,ERR=any other]: %errorlevel%" %errorlevel% 
if NOT ERRORLEVEL 0 GOTO FINAL_ERROR 
if exist "9990294_UPDATE_Concessions.sql" rename "9990294_UPDATE_Concessions.sql" "9990294_UPDATE_Concessions.sql.ok" 

,我面对的是与errorlevel,因为我运行数据库脚本后,它总是返回0。这是问题,因为指令CALL:ECHORESULT "result [OK=0,ERR=any other]: %errorlevel%" %errorlevel% 。如果脚本错误运行,它将永远不会去FINAL_ERROR。我不知道如何进行验证,以便在发生脚本错误时停止该过程。

回答

1

您的错误检查逻辑错误。

IF ERRORLEVEL N如果错误级别> = N,则为true。所以IF NOT ERRORLEVEL 0永远不会是真的! (假设错误级别不是负数)。

你想要么

if ERRORLEVEL 1 goto FINAL_ERROR 

if %ERRORLEVEL% neq 0 goto FINAL_ERROR 

另一件事。您应该在尝试测试的命令后立即测试ERRORLEVEL。我不知道如何编码:ECHORESULT例程,但它可能会改变当前的ERRORLEVEL值。