Подтвердить что ты не робот

Проверьте, была ли команда успешной в пакетном файле

Как в пакетном файле проверить, есть ли команда

start "" javaw -jar %~p0/example.jar

удался или возникла ошибка?

Я хочу использовать инструкции if/else для эхо-вывода этой информации.

4b9b3361

Ответ 1

Вы можете использовать

if errorlevel 1 echo Unsuccessful

в некоторых случаях. Это зависит от последней команды, возвращающей правильный код выхода. Вы не сможете сказать, что что-то не так, если ваша программа возвращается нормально, даже если было ненормальное условие.

Ответ 2

Вероятно, это не работает с start, так как это запустит новое окно, но для ответа на ваш вопрос:

Если команда возвращает уровень ошибки, вы можете проверить следующие способы:

Определенный уровень ошибок

commandhere
if %errorlevel%==131 echo do something

В случае ошибки

commandhere || echo what to do if error level ISN'T 0

В случае отсутствия ошибки

commandhere && echo what to do if error level IS 0

Если он не возвращает уровень ошибки, но дает результат, вы можете поймать его в переменной и определить по выходному примеру (обратите внимание, что токены и делимы являются просто примерами и, скорее всего, не сработают с любыми специальными символами)

По завершении полного вывода

for /f "tokens=* delims=" %%a in ('somecommand') do set output=%%a
if %output%==whateveritwouldsayinerror echo error

Или вы можете просто искать одну фразу на выходе, например, слово Error

Проверка на строку

commandhere | find "Error" || echo There was no error!
commandhere | find "Error" && echo There was an error!

И вы могли бы даже смешаться (просто не забывайте бежать | с помощью ^|, если в инструкции for)

Надеюсь, что это поможет.

Ответ 3

Большинство команд/программ возвращают 0 при успехе и другое значение, называемое errorlevel, чтобы сигнализировать об ошибке.

Вы можете проверить это в своем пакете, например:

call <THE_COMMAND_HERE>
if %ERRORLEVEL% == 0 goto :next
echo "Errors encountered during execution.  Exited with status: %errorlevel%"
goto :endofscript

:next
echo "Doing the next thing"

:endofscript
echo "Script complete"

Ответ 4

Добра, мне было трудно найти ответ на этот вопрос... Вот он:

cd thisDoesntExist
if %errorlevel% == 0 (
  echo Oh, I guess it does
  echo Huh.
)

Ответ 5

Я не знаю, будет ли javaw писать переменной% errorlevel%, но это возможно.

echo %errorlevel% после того, как вы запустите его непосредственно, чтобы увидеть.

Кроме этого, вы можете вывести вывод javaw в файл, а затем использовать find, чтобы узнать, какие результаты были. Не зная выхода из этого, я не могу вам помочь.