Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/260: Рейтинг темы: голосов - 260, средняя оценка - 4.63
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
1

Обработка значения ERRORLEVEL

24.12.2015, 17:07. Показов 47759. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!
Столкнулся с проблемой обработки значения errorlevel.
Вызываю внешний скрипт
call script1.bat %параметры%

Внутри script1.bat точно меняется значение errorlevel, становится отличным от 0 (ввожу неверные логин и пароль для подключения к схеме в sqlplus).
Проверял это, выводя значение с помощью echo.
Как только управление возвращается к внешнему батнику, то errorlevel почему-то обнуляется:
Windows Batch file
1
2
3
4
5
if %errorlevel% equ 0 (
  echo Connection successfully completed!
) else (
    Connection not complete!
  )
Т.е. всегда выводится первое сообщение, независимо от введенных данных.
Подскажите, как правильно передать значение errorlevel из script1.bat во внешний скрипт?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2015, 17:07
Ответы с готовыми решениями:

Обработка значения ERRORLEVEL
есть скриптик, кусок его прилагаю errorlevel выдает 17, хотя должен по моему мнению 1...

Проверка %ERRORLEVEL%
Добрый день! Помогите пожалуйста. После запуска команды необходимо сделать проверку %ERRORLEVEL%....

%ERRORLEVEL% в Windows Embedded CE 6.0
@echo off set count=0 :begin set /A count=count+1 ping localhost -n 10 ping -n 1 -w 3000...

Получение ERRORLEVEL команды TASKKILL
Здравствуйте. В системе периодически запускается скрипт, работа которого занимает определенное...

20
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 17:12 2
Windows Batch file
if errorlevel 0 (echo 0) else (echo not 0)
0
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 17:15  [ТС] 3
vavun, не понял, что Вы имеете ввиду?
0
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 17:17 4
m9yt, весь батник покажите.
0
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 17:21  [ТС] 5
Основной батник(не полный текст, только основное):
Windows Batch file
1
2
3
4
5
6
7
8
9
echo off 
cls
SETLOCAL ENABLEDELAYEDEXPANSION
call TOOLS\ConnectionCheck\ConnectionCheck.bat %SERVER% %SCHEMA% %SCHEMA_PASS%
if %errorlevel% equ 0 (
  echo Connection successfully completed!
) else (
    echo Connection not completed!
  )
ConnectionCheck.bat:
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION 
set SERVER=%1
shift
set SCHEMA=%1
shift
set SCHEMA_PASS=%1
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @TOOLS\Scripts\Install\ConnectionCheck.sql
Внутри ConnectionCheck.sql 1 оператор - exit;

Если вызывать проверку errorlevel внутри ConnectionCheck, то идет в нужные ветки.
0
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 17:32 6
Основной
Windows Batch file
1
2
3
4
5
6
7
echo off 
call TOOLS\ConnectionCheck\ConnectionCheck.bat %SERVER% %SCHEMA% %SCHEMA_PASS%
if errorlevel 0 (
  echo Connection successfully completed!
) else (
    echo Connection not completed!
  )

ConnectionCheck.bat
Восьмая строка
Windows Batch file
8
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @TOOLS\Scripts\Install\ConnectionCheck.sql && exit /b 0 || exit /b 1
Добавлено через 5 минут
Зачем вам вообще ConnectionCheck.bat ?
Запишите все в основной
0
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 17:34  [ТС] 7
vavun, не помогло.

Насчет писать в основной - была такая идея. Но хочу разобраться, почему не работает этот вариант.
0
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 17:45 8
Странно. Должен работать.

Либо у sqlplus.exe какие то особенности.

запишите это в основной вместо call TOOLS\ConnectionCheck\ConnectionCheck.bat

Windows Batch file
1
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @TOOLS\Scripts\Install\ConnectionCheck.sql && echo Connection successfully established! || echo Connection failed!
Что выдаст echo в случае успеха и в случае ошибки
0
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 18:00  [ТС] 9
vavun,
Windows Batch file
1
@TOOLS\Scripts\Install\ConnectionCheck.sql && echo Connection successfully established! || echo Connection failed!
в основном скрипте работает, как надо.
В любом случае, спасибо за помощь!
0
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 18:21 10
m9yt, мне тут умный человек подсказал, что я ошибся кое где.


Надо так
Windows Batch file
if not errorlevel 1
или ваш вариант, он был верным.
Windows Batch file
1
if %errorlevel% equ 0
НО !

&& exit /b 0 || exit /b 1 должно быть обязательно, ибо именно это устанавливает errorlevel

Тоесть восьмая строка, как я уже писал, была сделана верно

Windows Batch file
8
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @TOOLS\Scripts\Install\ConnectionCheck.sql && exit /b 0 || exit /b 1

а if %errorlevel% equ 0
изначально был верным ваш

Вроде больше ничего не напутал
1
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 18:21  [ТС] 11
Вернусь к теме.
Не написал про одну важную вещь.
Запуск sqlplus сопровождался и вызовом еще 1 скрипта:
Windows Batch file
1
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @TOOLS\Scripts\Install\ConnectionCheck.sql | cscript TOOLS\ForLOG.js >> "file.log"
Убрав эту 2 часть, все заработало. Походу, этот скрипт обнуляет переменную.
Как в таком случаем поступить?
0
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 18:23 12
Цитата Сообщение от m9yt Посмотреть сообщение
Походу, этот скрипт обнуляет переменную.
Похоже на правду, но я уже запутался
0
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 18:31  [ТС] 13
Прошу помощи еще раз, если не затруднит)
Весь день убил на это, очень уж охота решить проблему!
0
10585 / 5548 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
24.12.2015, 18:36 14
Цитата Сообщение от m9yt Посмотреть сообщение
Не написал про одну важную вещь.
Цитата Сообщение от m9yt Посмотреть сообщение
не полный текст, только основное
Вот лучше выложите все полностью, только без паролей, и детально опишите, что происходит, и что должно происходить.
0
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 19:29  [ТС] 15
vavun,

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
echo off 
cls
SETLOCAL ENABLEDELAYEDEXPANSION 
set SERVER=
set SCHEMA=
set SCHEMA_PASS=
 
rem Задаем данные для подключения
set /P SERVER="Input server: "
 
set /P SCHEMA="Input schema: "
 
set /P SCHEMA_PASS="Input password for %SCHEMA%: "
 
rem Создаем каталог для логирования
set LOG_FOLDER=OUT\LOG\123
if not exist %LOG_FOLDER% (
  mkdir "%LOG_FOLDER%"
)
echo Log in "file.log" 
 
rem Вызываем sqlplus, где в ConnectionCheck.sql содержится только "exit;" При этом вызываем скрипт, который складывает поток от sqlplus в файл
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @SRV\TOOLS\Scripts\Install\ConnectionCheck.sql | cscript SRV\TOOLS\ForLOG.js >> "file.log"
if %errorlevel% equ 0 ( 
  echo Connection successfully established 
) else ( 
    echo Connection failed 
  )
  
pause
ForLOG.js:
Javascript
1
2
3
4
5
6
while (!WScript.StdIn.AtEndOfStream)
{
var wrstr = WScript.StdIn.ReadLine();
WScript.StdOut.WriteLine(wrstr);
WScript.StdErr.WriteLine(wrstr);
}
Добавлено через 8 минут
Убираю этот кусок из 23 строки:
Windows Batch file
1
| cscript SRV\TOOLS\ForLOG.js >> "file.log"
и все работает как надо.

Добавлено через 32 минуты
Согласен оставить:
Windows Batch file
1
sqlplus.exe -S -L %SCHEMA%/%SCHEMA_PASS%@%SERVER% @SRV\TOOLS\Scripts\Install\ConnectionCheck.sql
И писать в лог-файл отдельно каждую нужную мне строку по проверке подключения:
Windows Batch file
1
2
3
4
5
if %errorlevel% equ 0 ( 
  echo Connection successfully established | cscript SRV\TOOLS\ForLOG.js >> "file.log"
) else ( 
    echo Connection failed | cscript SRV\TOOLS\ForLOG.js >> "file.log"
  )
Но нужно решить проблему с тем, что каждый вызов скрипта ForLOG.js вначале пишет и информацию о cscript, которая появляется при его запуске:
Сервер сценариев Windows (Microsoft R) версия 5.8
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.
0
3460 / 1998 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
24.12.2015, 19:35 16
Лучший ответ Сообщение было отмечено vavun как решение

Решение

Цитата Сообщение от m9yt Посмотреть сообщение
Но нужно решить проблему с тем, что каждый вызов скрипта ForLOG.js вначале пишет и информацию о cmd-файле, которая появляется при его запуске:
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.


Windows Batch file
cscript //nologo SRV\TOOLS\ForLOG.js >> "file.log"
1
19 / 3 / 1
Регистрация: 17.11.2009
Сообщений: 139
24.12.2015, 19:39  [ТС] 17
ComSpec, спасибо!
0
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
29.12.2015, 21:11 18
Цитата Сообщение от m9yt Посмотреть сообщение
Насчет писать в основной - была такая идея. Но хочу разобраться, почему не работает этот вариант.
Потому что завершение дочернего скрипта без явного указания кода возврата (в вашем случае: exit /b %errorlevel%), автоматически означает установку кода успеха - 0.
0
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 67
11.12.2018, 18:04 19
Вопрос.
.
Как в ECHO вывести строку вот такую строку "%ERRORLEVEL%" (НЕ значение %ERRORLEVEL%) ?
Именно строку "%ERRORLEVEL%" , А НЕ ЗНАЧЕНИЕ переменной %ERRORLEVEL% .
.
Вариант
ECHO ^%ERRORLEVEL^% НЕ работает !!!
.
0
4335 / 2125 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
11.12.2018, 18:17 20
удвоить % - %%
1
11.12.2018, 18:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2018, 18:17
Помогаю со студенческими работами здесь

Коды возврата ошибок (расшифровки ErrorLevel)*
Коды возврата ошибок (встроенных команд и других программ) Для новичков - очень подробно...

Errorlevel 9009 при выполнении dsmod
при выполнении: set login=%username% for /f "delims=xxx" %%a in ('findstr %login%...

Вывести текст ошибки по значению errorlevel в bat
Добрый день, товарищи! Появилась необходимость записывать в log-файлы сообщения об ошибках. Типа...

Удаленный запуск и остановка служб PsService: вне зависимости от состояние службы ERRORLEVEL всегда 1
Доброго дня Необходимо запуск и остановка служб Win XP удаленно. Имеется такой батник: @ECHO off...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru