我想借助批处理程序在Windows 7上启动Apache服务 。 这是一个非常简单的任务,我所要做的就是input:
net start Apache2.2
然后按Enter键; 但是,我必须有pipe理员权限才能这样做,否则我会得到一些像这样的错误消息:
System error 5 has occurred. Access is denied.
没关系,但我想检查“networking启动XY”命令的输出,并在输出(或响应)包含提到的“访问被拒绝”string,那么我想做一些其他的事情批处理程序的另一部分(输出一些自定义错误消息和东西)。
我试图用FIND命令来检查输出( IT不适合它 ):
@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
启动这个没有pipe理员权限的批处理程序,它输出提到的“访问被拒绝”,所以它应该跳转到“gotcha”标签。 不幸的是,它不能正常工作,它跳转到“not_found”,这意味着它没有find给定的string(“访问被拒绝”)。
也许问题是这样的
net send XY
命令只是在检查pipe理权限之后发送“访问被拒绝”输出一点点延迟,并且发现不再关心它。 但这只是猜测,我不知道问题的真正解释。
但上面的代码工作,当我创build另一个小批量程序,只是简单地回应上面的行与“访问被拒绝”string。 所以另一个小批量程序,显示'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工作 :
@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,这意味着它已经find给定的string,所以程序的执行跳转到“gotcha”标签。
那么如何才能find“net start XY”命令延迟的“Access is denied”输出?
非常感谢您提前!
使用
net start Apache2.2 2>&1 | find /i "%search_string%" > nul
以便将STDERR与标准输出联系起来。