Я использую пакетный скрипт для автоматического запуска некоторых симуляций и записи данных. Однако, поскольку это делается для целей тестирования, я регулярно получаю сообщения об ошибках, которые появляются из пакетного сценария из-за ошибки в программном обеспечении для моделирования. Я хотел бы добавить в сценарий несколько разных вещей, обе из которых я очень нечетко понимаю в реализации, отсюда и мой вопрос.
Во-первых, я хотел бы добавить скрипт, который сделает запись нулевой, когда появится сообщение об ошибке.
У меня есть цикл, который выглядит так
for /f "delims=_" %%J IN ('forfiles /p "%%F" /m *.ext/c "cmd /c echo @path"') DO (
set start=!time!
start "PROGRAM" /D "c:\Path\to\the\PROGRAM" /Wait program -r %%J
rem This loop uses a regular expression to find the database name from the .ext file
rem and sets it to a variable.
for /f "tokens=3 delims=<>" %%a in ('findstr "<Name>ABCDir" "%%~fJ"') do set name=%%a
set end=!time!
rem The following two loops convert start time and end time to centiseconds.
rem The time variable will be converted to minutes inside a sql query so that floats are possible.
for /F "tokens=1-4 delims=:.," %%a in ("!start!") do (
set /a "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)
for /F "tokens=1-4 delims=:.," %%a in ("!end!") do (
set /a "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)
rem Calculate the elapsed time by subtracting values
set /A elapsed=end-start
sqlcmd -S SERVER -d DATABASE -v Var1 = "!name!" Var2 = "%variable2%" Var3 = !elapsed! Var4 = %variable4% -i "\\path\to\the\query\Insert.sql"
)
Поэтому я хотел бы, чтобы каждый раз, когда появляется сообщение об ошибке, скрипт запускал следующий файл и менял переменную !elapsed!
на null
.
Но я хотел бы также добавить скрипт, который будет отображать всплывающий уровень ошибки. Я видел один из способов сделать это следующим образом:
@ECHO OFF
IF ERRORLEVEL 1 SET ERRORLEV=1
IF ERRORLEVEL 2 SET ERRORLEV=2
IF ERRORLEVEL 3 SET ERRORLEV=3
IF ERRORLEVEL 4 SET ERRORLEV=4
•
•
•
IF ERRORLEVEL 254 SET ERRORLEV=254
IF ERRORLEVEL 255 SET ERRORLEV=255
ECHO ERRORLEVEL = %ERRORLEV%
но кажется, что должен быть более эффективный способ сделать это, например, с циклом, который подсчитывает уровень ошибки, я устанавливаю errorlev = i, где i = 0, и переходит к n.
Я очень ценю любое понимание, которое вы, ребята, можете предложить.
set /A elapsed=end-start
echo Elapsed Time: !elapsed!
IF !ERRORLEVEL! GTR 0 echo Error Level !ERRORLEVEL! Occurred.
IF !ERRORLEVEL! GTR 0 set elapsed=NULL
- person David   schedule 21.01.2015