Войти

Показать полную графическую версию : [решено] Bat почему не работает вывод переменной %errorlevel%


Eugene Shugaev
11-03-2014, 19:31
Пишу программу и понадобился вывод информации о правах администратора, решил реализовать в виде:
......

:admin_test
echo Good start %time% -- %date% >> %windir%\system32\boot_usb_log.txt
if errorlevel 2 goto :admin_test_2
if errorlevel 1 goto :admin_test_1
:admin_test_2
goto :home
:admin_test_1
cls
echo *************ТРЕБУЮТСЯ ПРАВА АДМИНИСТРАТОРА*******************
goto :admin_test_bad

......
Но как bat не запускай ответ на level всегда 0, записало в log или нет, да пофиг все равно 0!!!!!
.....
:level
echo %errorlevel%
pause
goto :home
.....

Georgio
11-03-2014, 19:59
echo Good start %time% -- %date% >> %windir%\system32\boot_usb_log.txt&& goto :admin_test_2|| goto :admin_test_1

Eugene Shugaev
11-03-2014, 20:12
Georgio, Спасибо я решил проблему, НО можешь написать или обьяснить на примере использование получения кода ошибки и переход в зависимости от кода ошибки
Напиши пример где бы работал этот код
goto :admin_test_%errorlevel%
if errorlevel 2 goto :admin_test_2
if errorlevel 1 goto :admin_test_1

:admin_test_2
echo Все хорошо!!!
pause
goto :exit

:admin_test_1
echo Все плохо(((
pause
goto :exit

:exit
exit

gora
11-03-2014, 20:50
Eugene Shugaev, попробуйте укоротить имена меток
Метка может включать пробелы, но не может включать другие разделители, такие как точка с запятой или знак равенства. В команде goto используются только первые восемь знаков метки. Например, следующие метки эквивалентны и рассматриваются как :hithere0:

:hithere0
:hithere01
:hithere02

Eugene Shugaev
11-03-2014, 21:07
gora, Я сократил метки, но все равно посылает в :admin0

@echo off
title up_boot_usb v.0.2 # Creator Eugene Shugaev

echo Good start %time% -- %date% >> %windir%\system32\boot_usb_log.txt
echo %errorlevel%
pause
if "%errorlevel%"=="2" goto:admin2
if "%errorlevel%"=="1" goto:admin1
if "%errorlevel%"=="0" goto:admin0

:admin2
echo Все хорошо!!!
goto :exit

:admin1
echo Все плохо(((
goto :exit

:admin0
echo Сраный код равен %errorlevel%
goto :exit

:exit
pause
exit

gora
11-03-2014, 21:11
но все равно посылает в :admin0 »
Очевидно, что у Вас %errorlevel% = 0

Eugene Shugaev
11-03-2014, 21:15
gora, Это понятно что %errorlevel% = 0, но если процесс завершается ошибкой (отказом доступа) то должен быть код 1 говорящий о ошибке

gora
11-03-2014, 21:44
но если процесс завершается ошибкой (отказом доступа) то должен быть код 1 говорящий о ошибке »
Я полагаю, что это не есть истина!
Думаю, что далеко не все команды в cmd устанавливают или сбрасывают значение переменной %errorlevel% и это как раз Ваш случай.

Iska
12-03-2014, 06:04
но если процесс завершается ошибкой (отказом доступа) »
Какой процесс? У вас «pause», «echo» и «title».




© OSzone.net 2001-2012