运行批处理文件时忽略错误消息,但不是以典型方式

时间:2014-12-03 15:48:57

标签: sql sql-server-2008 batch-file command batch-processing

我知道有办法说出来      如果ERRORMESSAGE GOTO 但我一直认为这些只是告诉计算机移过一个不起作用的命令然后转到下一个命令。

我有一个批处理文件,它将在一个文件夹(模拟)中运行大约30个文件,以使用sqlcmd将数据转储到数据库中。许多这些文件较旧,可能存在兼容性问题。通常我已经运行它以便在弹出错误消息时我可以看到它并且我可以将其关闭以便它可以继续使用。但是,如果我可以让它在一夜之间运行并且在早上没有遇到错误信息的情况下完成它将会很好。我会看到丢失数据中的错误,所以没关系。

这是代码的样子:

RMDIR c:\batchfolder /s /q
mkdir c:\batchfolder
xcopy "\\path\*" c:\batchfolder /s /i
cd c:\path\testfolder
for /f "tokens=*" %%a in ('dir /b /od') do set newest=%%a
cd c:\batchfolder
sqlcmd -S server -i "\\path\DropDatabases.sql"
for /D /r %%F IN ("*") DO ( 
   for %%G  IN ("%%F\*.extension") DO xcopy "%%G" c:\path\testfolder\%newest% /y /i
   for /f "delims=_" %%J IN ('forfiles /p "%%F" /m *.programext /c "cmd /c echo @path"')  DO start "PROGRAM"  /D "c:\path\testfolder" /Wait PROGRAM -r  %%J
)
sqlcmd -S MSA-SQL -i "\\path\dumpdataquery.sql"

pause    

1 个答案:

答案 0 :(得分:0)

发生错误时,您可以使用exit /b继续循环。我假设运行“PROGRAM”时发生错误。要绕过它,您可以对for /f "delims=_" %%J命令进行以下更改。

    for /D /r %%F IN ("*") DO ( 
       for %%G  IN ("%%F\*.extension") DO xcopy "%%G" c:\path\testfolder\%newest% /y /i
       for /f "delims=_" %%J IN ('forfiles /p "%%F" /m *.programext /c "cmd /c echo @path"')  DO (
                start "PROGRAM"  /D "c:\path\testfolder" /Wait PROGRAM -r  %%J
                if not %errorlevel%==0 echo Error file %%F &&exit /b
        )
     )