Я бы хотел запустить службу Apache на моей Windows 7 с помощью пакетной программы .Это действительно простая задача, все, что мне нужно сделать, это напечатать:
net start Apache2.2
и нажмите Enter; НО у меня должны быть права администратора для этого, в противном случае я получаю некоторые сообщения об ошибках, подобные этому:
System error 5 has occurred.
Access is denied.
Все в порядке, но я хотел бы проверить выводКоманда «net start XY», и в случае, если выходные данные (или ответ) содержат упомянутую строку «Доступ запрещен», я хотел бы выполнить некоторые другие действия в другой части пакетной программы (вывести некоторые пользовательские сообщения об ошибках ивещи).
Я попытался проверить вывод с помощью команды НАЙТИ , как это ( ЭТО НЕ ДОЛЖНО РАБОТАТЬ, ЭТО ДОЛЖНО ):
@echo off
set search_string=Access is denied
echo We are looking for this string: "%search_string%"
rem set errorlevel =
net start Apache2.2 | find /i "%search_string%" > nul
echo The errorlevel number is: "%ERRORLEVEL%"
if %ERRORLEVEL% EQU 0 goto gotcha
if %ERRORLEVEL% EQU 1 goto not_found
if %ERRORLEVEL% EQU 2 goto para
:gotcha
echo OK, found it
echo So maybe you don't have the rights to do so...
goto end
:not_found
echo String not found...
echo So this would mean there are no problems related to admin-rights... but YES, there are... :-S
goto end
:para
echo Something's not OK...
goto end
:end
echo -- END --
pause
При запуске этой пакетной программы без прав администратора выводится упомянутое «Доступ запрещен», поэтому следует перейти к метке «получил».К сожалению, он не работает нормально, он переходит к «not_found», что означает, что он не нашел данную строку («Доступ запрещен»).
Возможно, проблема в том, что
net send XY
команда отправляет вывод «Доступ запрещен» с небольшой задержкой, сразу после проверки прав администратора, и функция find больше не заботится об этом.Но это просто предположение, я не знаю реального объяснения проблемы.
НО код выше работает, когда я создаю еще одну небольшую пакетную программу, которая просто повторяет строки выше с «AccessЗапрещено "строка.Итак, другая маленькая пакетная программа, которая показывает, что команда 'find' может работать так, как написано выше, выглядит следующим образом:
@echo off
echo.
echo System error 5 has occurred.
echo.
echo Access is denied. blabla
echo.
Я сохранил этот файл с именем "write_accessdenied_stuff.bat".
После этого я попробовал приведенный выше код, но вместо строки «net send XY ....» я написал такую:
write_accessdenied_stuff.bat | find /i "%search_string%" > nul
, поэтому началокод изменяется следующим образом: IT WORKS :
@echo off
set search_string=Access is denied
echo We are looking for this string: "%search_string%"
write_accessdenied_stuff.bat | find /i "%search_string%" > nul
..........
..........
С помощью этой команды команда find устанавливает для errorlevel значение 0, что означает, что она нашла данную строку, поэтому выполнениепрограммы переходит на метку "gotcha".
Так как же я могу найти немного задержанный вывод "Доступ запрещен" команды "net start XY"?
Заранее большое спасибо !!!