Проблема передачи кода из halt в переменную %ERRORLEVEL%

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение PapaNT » 08.12.2016 13:39:55

Всем доброго времени года!

Заморочился написать весьма хитрый батник (среда выполнения Windows Server 2003*32|2012*64). В батнике стоит вызов моей утилиты завершающейся halt(Info) (код утилиты отдебажен и завершается именно этой строкой с Info=4). После выполнения моей утилиты в батнике переменная erorlevel упорно сохраняет значение 0.
Замена вызова Halt(Info) на ExitCode := Info также не привела к желаемому результату :(

Как гарантированно передать значение кода возврата в батник?
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение SAK » 09.12.2016 16:26:46

Следующая программа тоже возвращает 0?
Код: Выделить всё
begin
    halt(4)
end.


Пример батника можно увидеть?
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение PapaNT » 09.12.2016 17:12:39

Да. 0 и после такого кода :(

Добавлено спустя 5 минут 8 секунд:
Похоже, что это старая проблема:

Два примера:
http://qc.embarcadero.com/wc/qcmain.aspx?d=51427
http://qc.embarcadero.com/wc/qcmain.aspx?d=77200
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение SAK » 09.12.2016 17:45:31

Перечисленные примеры не подходят для предложенной простейшей программы. Покажите пример батника.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение PapaNT » 09.12.2016 17:54:38

Код: Выделить всё
my.exe
rem call my.exe также пробовал

%errorlevel%
rem Пробовал также:
rem echo %errorlevel%
rem if %errorlevel% NEQ 4 echo %errorlevel%



Во всех вариантах нулевой код в errorlevel.
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение скалогрыз » 09.12.2016 17:59:37

torun.pas:
Код: Выделить всё
program torun;
begin
  halt(4);
end.


testbat.bat
Код: Выделить всё
torun.exe

echo %ERRORLEVEL%


запускаю testbat.bat
Код: Выделить всё
C:\FPC_Laz\testbat>echo 4
4

Надеюсь, поможет :)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение PapaNT » 09.12.2016 18:11:13

Возможно, мой uses crt мешает...

P.S.: свой exe я собирай на 2.6.0
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение скалогрыз » 09.12.2016 18:13:32

PapaNT писал(а):Возможно, мой uses crt мешает...

не вопрос!

torun.pas
Код: Выделить всё
program torun;
uses  crt;
begin
  clrscr;
  halt(5);
end.


testbat.bat
Код: Выделить всё
torun.exe

echo %ERRORLEVEL%


запускаю testbat.bat
Код: Выделить всё
C:\FPC_Laz\testbat>echo 5
5

собираю fpc 2.6.4
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение Лекс Айрин » 09.12.2016 19:27:36

PapaNT а ты его переписывал?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение PapaNT » 11.12.2016 15:36:13

А я писал анализ errorlevel в теле цикла.
Оказалось, что заработало только когда воткнул программу с кодом:
Код: Выделить всё
begin
  clrscr;
  halt(4);
end.

перед входом в цикл. После этого не все заработало:
Код: Выделить всё
halt4.exe
for /F in "tokens=1,2" %%i in (my_file.txt) do (call my.exe %%i %%j
                                                if %errorlevel% NEQ 4 echo error 4)



Упс... В цикле видит только внешнюю к циклу переменную errorlevel :(((

Добавлено спустя 34 минуты 17 секунд:
Вылечил.

Надо было малость поправить батник:
Код: Выделить всё
Setlocal EnableDelayedExpansion
for /F in "tokens=1,2" %%i in (my_file.txt) do (call my.exe %%i %%j
                                                if "!errorlevel!"=="4" echo errorcode 4)
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Проблема передачи кода из halt в переменную %ERRORLEVEL%

Сообщение PapaNT » 12.12.2016 23:03:00

решено. Ветку можно закрывать.
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru