Sco*_*ham 51 windows batch-file
我希望能够从Windows批处理文件中查询服务是否正在运行.我知道我可以用:
sc查询"ServiceName"
但是,这会抛弃一些文字.我真正想要的是设置errorlevel环境变量,以便我可以采取行动.
你知道一个简单的方法吗?
更新
到目前为止感谢您的答案.我担心解析文本的解决方案可能无法在非英语操作系统上运行.有没有人知道这个方法,或者我将不得不咬紧牙关并编写一个控制台程序来实现这一目标.
Iga*_*ban 75
sc query "ServiceName" | find "RUNNING"
Run Code Online (Sandbox Code Playgroud)
小智 16
让我们回到Windows上的旧批量编程学校
net start | find "Service Name"
Run Code Online (Sandbox Code Playgroud)
这将适用于所有地方......
小智 8
如果您不介意将net命令与grep结合使用,则可以使用以下脚本.
@echo off
net start | grep -x "Service"
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo trouble
goto end
:started
echo started
goto end
:stopped
echo stopped
goto end
:end
Run Code Online (Sandbox Code Playgroud)
您可以将wmic与/ locale选项一起使用
call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
echo Running
) else (
echo Not running
)
Run Code Online (Sandbox Code Playgroud)
小智 5
在这里稍微跳出思维定势,我将建议 powershell 可能是最新的 XP/2003 机器上的答案,当然也可以用于 Vista/2008 和更新版本(而不是 .bat/.cmd)。任何有一些 Perl 背景的人都会很快感到宾至如归。
$serviceName = "ServiceName";
$serviceStatus = (get-service "$serviceName").Status;
if ($serviceStatus -eq "Running") {
echo "Service is Running";
}
else {
#Could be Stopped, Stopping, Paused, or even Starting...
echo "Service is $serviceStatus";
}
Run Code Online (Sandbox Code Playgroud)
另一种方式,如果您对批处理有大量投资,则将 PS 脚本作为单行运行,返回退出代码。
@ECHO off
SET PS=powershell -nologo -command
%PS% "& {if((get-service SvcName).Status -eq 'Running'){exit 1}}"
ECHO.%ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud)
作为单行模式运行也会以混乱为代价绕过默认的 PS 代码签名策略。将 PS 命令放在 .ps1 文件中并像powershell myCode.ps1您可能会发现签署您的 powershell 脚本一样运行,以自动方式运行它们(取决于您的环境)。有关详细信息,请参阅http://www.hanselman.com/blog/SigningPowerShellScripts.aspx
小智 5
@ECHO OFF
REM testing at cmd : sc query "MSSQLSERVER" | findstr RUNNING
REM "MSSQLSERVER" is the name of Service for sample
sc query "MSSQLSERVER" %1 | findstr RUNNING
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo Oh noooo.. trouble mas bro
goto end
:started
echo "SQL Server (MSSQLSERVER)" is started
goto end
:stopped
echo "SQL Server (MSSQLSERVER)" is stopped
echo Starting service
net start "MSSQLSERVER"
goto end
:erro
echo Error please check your command.. mas bro
goto end
:end
Run Code Online (Sandbox Code Playgroud)