Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.67.48] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Господа, объясните пожалуйста, что есть ERRORLEVEL по сути (не по назначению разумеется), правила образования, местоположение, время жизни...
Спасибо.. |
Сообщ.
#2
,
|
|
|
Хм.. насколько я помню, ERRORLEVEL существует только в досовском комманд.коме (в юниховых *sh он по-другому называется). Ты его имеешь в виду?..
|
Сообщ.
#3
,
|
|
|
ну кароче это результат жизнедеятельности программы, который используется, чтобы дать понять другим программам, как прошло... ;-)
|
Сообщ.
#4
,
|
|
|
Правило образования - значение регистра AL при выходе через AH=4Ch/INT 21h. При выходе через INT 20h, AH=0/INT 21h вроде как нулевой.... Храниться должен где-то в переменных ДОСа...... Срок жизни - до следующего запуска.....
|
Сообщ.
#5
,
|
|
|
да перепробовал я энто всё.... не вытанцовывается...
нужно запустить батник, в котором последовательно запускаются две программы: - одна устанавливает EL - вторая его проверяет и, в зависимости от энтого выполняет чего-то (прога типа IF ERRORLEVEL ...) |
Сообщ.
#6
,
|
|
|
А ты сделай прогу, которой в качестве параметра передаётся то, что нужно запустить и после чего нужно проверять ERRORLEVEL....
|
Сообщ.
#7
,
|
|
|
нет важнее всего программа, которая ПРОВЕРЯЕТ EL...
мне нужен, по правде говоря, только механизм отыскания и проверки EL, а применение сему я найду. Хуже, если EL уничтожается при ЗАПУСКЕ следующей программы... хотя, не должен бы... |
Сообщ.
#8
,
|
|
|
Что такое errorlevel? По сути - переменная окружения, которая выставляется в командном режиме после выполнения каждой команды (любой). Поэтому и ловить ты его можешь только сразу после запуска программы. Но оно(она) какая-то неправильная переменная, потому что кроме как в батче и не видна. Вот. Херня какая.
|
Сообщ.
#9
,
|
|
|
Идея проста - если её что-то проверяет (ну пусть даже батник), то она где-то лежит....
Вопрос!!! ГДЕ ЛЕЖИТ ... и В КАКОМ ВИДЕ ? |
Сообщ.
#10
,
|
|
|
ERRORLEVEL - это просто макроопределение в великой могучей программе COMMAND.COM.
if errorlevel 5 означает: еси код, возвращённый вызванной программой _больше_ или равен 5, то.. Вот и всё. Вне COMMAND.COM (т.е. вне .bat-файлов) данная хрень не имеет абсолютно никакого значения. Это НЕ переменная окружения (мля, ну и перевод.. environment..).. |
Сообщ.
#11
,
|
|
|
непонятки - программа, вызванная из COMMAND.com как виртуальный модуль, возвращает ей значение (ЗНАЧЕНИЕ ТИПА INTEGER) !!!! Сразу вопрос - КУДА ОНА ЕГО ПОМЕСТИЛА?
А ОНА ЕГО КУДА-ТО поместила, раз COMMAND.COM может его проверить. повторюсь - ЭТО НЕ АСТРАЛЬНАЯ СУЩНОСТЬ - ЭТО ПЕРЕМЕННАЯ ТИПА INTEGER. почему программа из ТОГО ЖЕ БАТНИКА не может проделать ТО ЖЕ, ЧТО И МАКРООПРЕДЕЛЕНИЕ ERRORLEVEL ??? а также... макроопределение есть ни что иное как набор команд процессора... (мнение ламера, разумеется ) |
Сообщ.
#12
,
|
|
|
Ну.... во-первых, это переменная типа Byte....
Во-вторых.... Если при запуске своей проги ты обнаруживаешь ноль, когда вызываешь ah=4Dh/int21h, значит этот ERRORLEVEL уничтожается до запуска проги! Логично? Так что тебе придётся только писать TSR-ку.... Кстати.... я тебя обрадовать хочу! После вызова ah=4Dh/int21h это самое значение уничтожается! Поэтому даже TSR-ка тебе может не помочь.... |
Сообщ.
#13
,
|
|
|
Попробую внести ясность. ERRORLEVEL - это не переменная, а, действительно, только макроопределение. Причём, если сделать if ERRORLEVEL 1, то эта хрень вернёт TRUE для значений, равных _и_больших_, чем единица. Почему её ниоткуда нельзя прочитать, кроме как из батника? А можно в асмовой проге написать IF EXIST xxx.yyy THEN?? ERRORLEVEL - эта хрень, принадлежащая исключительно комманд.кому. А вот почему ты не можешь прочитать собственно код возврата предыдующей проги:
"the word in which DOS stores the return code is cleared after being read by this function, so the return code can only be retrieved once" [Ralph Brown's Interrupt List, выпуск 61, раздел Int 21, Func 4D]. А т.к. COMMAND.COM читает этот код возврата (чтобы дать возможность узнать о нём батнику), код будет сброшен, и больше никто о нём не узнает. |
Сообщ.
#14
,
|
|
|
Цитата Kernel Panic, 11.05.02, 18:57:53 [Int 21, Func 4D]. А т.к. COMMAND.COM читает этот код возврата (чтобы дать возможность узнать о нём батнику... ну...ну... и ГДЕ батник (то есть COMMAND.COM) энто исчет и КАК определяет при обработке строки IF ERRORL... ? |
Сообщ.
#15
,
|
|
|
Drew, смотри: комманд.ком - это интерпретатор. Вот он встречает в батнике строку, в которой его просят пустить какую-нить прогу. Он её пускает. Когда прога завершается, она возвращает управление комманд.кому, и тот проверяет, чё эта прога там вернула (int 21, ah=4D). И запоминает этот код возврата (где-то у себя в своих внутренних переменных). Потом продолжает интерпретировать батник. Следующей, скажем, идёт проверка ERRORLEVEL'a. Комманд.ком смотрит на свою переменную и принимает соответствующие действия.
|