如何只知道.exe文件的名称在cmd中停止服务?

我需要在不知道服务名称的情况下停止batch file中的Windows服务。 我唯一知道的是运行的文件被称为SomeServer.exe,但SC命令需要服务的实际名称。 目前我必须扫描一个configuration文件,并执行丑陋的string操作,但我希望有一个更聪明的方法。 有什么build议么?

for /f "tokens=2 delims=," %%a in ( 'wmic service get name^,pathname^,state /format:csv ^| findstr /i /r /c:"Someserver\.exe.*Running$"' ) do sc stop "%%a" 

它以csv格式检索系统名称,服务名称,路径名称和服务状态。 该列表在运行状态中被过滤为所需的可执行文件名称,使用逗号作为分隔符进行分隔,第二个字段(服务名称)用于停止服务

这可能是有用的http://richarddingwall.name/2009/06/18/windows-equivalents-of-ps-and-kill-commands/

如果你曾经使用过Unix,那么你无疑会被ps和kill命令所熟悉。 在Windows上,图形任务管理器执行这些角色相当好,但如果你发现自己需要诉诸命令行来杀死一个进程(例如,出于某种原因在Vista机器上,我正在写这个任务管理器只是坐系统托盘闪烁而不是打开),ps和kill的Windows等价物是tasklist和taskkill:

 tasklist /v - equivalent to ps aux taskkill /f /im ncover* - equivalent to kill -9 ncover* 

还有pslist http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx

编辑:用于服务使用psservice http://technet.microsoft.com/en-us/sysinternals/bb897542.aspx

或者使用这里描述的方法(使用注册表) https://stackoverflow.com/a/298823/1342402