ExitCode из Batchfile странный - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь запустить командный файл из скрипта powershell и проверить, не было ли ошибок во время выполнения.

Сейчас я делаю это с помощью следующего кода:

$job = Start-Process -FilePath "C:\Test\Testfile_2.bat" -Wait -passthru;
$job.ExitCode

Это работает ... или, по крайней мере, почти.

Пока я получаю код выхода, он действительно дает мне информацию только о последней команде, запущенной пакетным файлом.Позвольте мне объяснить это.

Если я сделаю следующее в моем пакетном файле:

MKDIR C:\Test\Testdir

Если я запусту это, я получу exitCode "0" при первом запуске, для всех следующих запусков яполучить «1», так как каталог уже существует.Но если я добавлю простой CD в конец пакетного файла:

MKDIR C:\Test\Testdir
CD C:\

Я ВСЕГДА получу exitCode "0", так как команда CD работает каждый раз.Таким образом, даже если каталог существует, и он выдаст мне ошибку в cmd, в exitCode нет ошибки.Есть ли способ проверить наличие ошибок во время выполнения пакетного файла с PowerShell, или мне нужно кодировать мой пакетный файл так, как он отменяется, как только возникает ошибка, и сразу же возвращает ошибку exitCode?

Спасибо за любую помощь или советы!

1 Ответ

0 голосов
/ 24 мая 2018

Чтобы внешняя программа, такая как ваша команда powershell, знала, что происходит во время выполнения пакетного сценария, вам нужно фактически записать это в свой пакетный файл, чтобы определить, что должно произойти во время определенных ошибок.

Например, ваш пример powershell просто запускает пакет, ожидает его завершения и повторяет last errorlevel, с которым вы завершили пакет, хотя у вас может быть множество различных уровней ошибок во времязапускаемый скрипт.

если, однако, ваш пакет обрабатывает ошибки внутренне, как в приведенном ниже примере, вы можете что-то с ним сделать:

....
ping google.ca >nul
if %errorlevel% neq 0 (
exit /b %errorlevel%
) else (
....
...