批量编程:在另一个程序中查找给定的string – 可能是延迟 – 输出

我想借助批处理程序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与标准输出联系起来。