我知道有办法说出来 如果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
答案 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
)
)