2014-01-25 3 views
0

Я борюсь за ошибку с возвратом ошибок в пакетном файле и не могу найти ответ.
Может ли кто-нибудь дать мне какие-нибудь подсказки?ошибка командного файла errorlevel дважды

У меня есть внешний двоичный файл, external.exe, который считывает код возврата (0-success, other-fail) командного файла, чтобы решить, что делать.

В пакетном файле mybatch.cmd я хотел запустить скрипт (perl) и вернуть результат в пакетный файл.

Например, mybatch.cmd:

@echo off 
myperl.pl 
exit %errorlevel% 

Хотя myperl.pl является:

#!perl.exe 
exit 0; 

Так что я хотел myperl.pl вернуть значение 0 в пакетном файле, а затем командный файл возвращает 0 в файл external.exe.

Но внешний.exe не работает должным образом.

1) Если я бегу mybatch.cmd из CLI, а затем "эхо% ERRORLEVEL%" от CLI, я мог видеть это 0.

2) Если добавить строку для отображения код возврата myperl.pl, я мог видеть код возврата myperl.pl именно 0.

Например:

@echo off 
myperl.pl 
echo %errorlevel% 
REM exit %errorlevel% 

Он будет отображать 0, поэтому сценарий Perl возвращает значение точно.

3) Если я добавлю строку, чтобы вручную установить код возврата в 0, файл external.exe работает нормально.

@echo off 
myperl.pl 
result=0 
exit %result% 

Это действительно странно. Есть идеи? Я не мог контролировать файл external.exe, поэтому я не мог отлаживать его.

В этом примере,% ErrorLevel% вызывается дважды:
1) Возвращение из myperl.pl к партии.
2) Возврат from mybatch.cmd к external.exe. Будет ли это проблемой?

ответ

0

Наконец-то выяснили причину.

myperl.pl должен быть с полным путем, иначе external.exe не знал, где находится myperl.pl.

0

Все, что вы сказали, верно: myperl.pl возвращает определенный уровень ошибок, пакетный файл принимает его, а затем возвращает соответствующее значение уровня ошибки. Проблема заключается в следующем: пакетный файл, до какой процесс вернуть свой уровень ошибок?

Эта схема всегда работает как отношение родительский и детский: родительский процесс выполняет дочерний процесс и ожидает его завершения, тогда родитель может принять значение errorlevel, возвращаемое дочерними элементами. Способ решить вашу проблему - если программа external.exe выполняет пакетный файл (cmd.exe) в качестве дочернего! Однако, если вы «не смогли контролировать внешний.exe», тогда нет способа решить вашу проблему ...

Откуда вы знаете, что внешний.exe program "читать код возврата (0-success, other-fail) командного файла, чтобы решить, что делать"? Я думаю, что у вас есть путаница в этот момент.

+0

спасибо @Aacini. В документации указано, что «external.exe считывает возвращаемое значение mybatch.cmd и 0-success, other-failure». И если я вручную установил код возврата как 0 или 1 в пакетном файле, например. «set result = 0», а затем «exit% result%», external.exe работает хорошо, как ожидалось. Проблема в том, что мне нужно установить значение в файле perl вместо командного файла. – user1748640

Смежные вопросы