Batch file 如何通过批处理脚本接收具有名称的进程

Batch file 如何通过批处理脚本接收具有名称的进程,batch-file,cmd,sc,Batch File,Cmd,Sc,我需要接收一个名称等于“MSSQLSERVER”或以“MSSQL$”开头的进程字符串。名称应以正斜杠(/)分隔。 我正在尝试使用这样的脚本: @echo off set mssqlDependenties= set defaultSqlServerServiceName="MSSQLSERVER" set namedSqlServerServiceNameBeginning="MSSQL$" setlocal enabledelayedexpansion

我需要接收一个名称等于“MSSQLSERVER”或以“MSSQL$”开头的进程字符串。名称应以正斜杠(/)分隔。 我正在尝试使用这样的脚本:

@echo off
set mssqlDependenties=
set defaultSqlServerServiceName="MSSQLSERVER"
set namedSqlServerServiceNameBeginning="MSSQL$"

setlocal enabledelayedexpansion
for /f "tokens=2" %%s in ('sc query state^= all ^| find "SERVICE_NAME: MSSQL"') do (
    set serviceName=%%s
    if "%%s" equ %defaultSqlServerServiceName% (
        set mssqlDependenties=!mssqlDependenties!/%%s
    )   
    if "%serviceName:~0,7%" equ %namedSqlServerServiceNameBeginning% (
        set mssqlDependenties=!mssqlDependenties!/%%s
    )
)

echo %mssqlDependenties%
但我收到一个错误:

The syntax of the command is incorrect.

MSSQL依赖项应包含MSSQLSERVER/MSSQL$1/MSSQL$2/MSSQL$3等。

avery_larry的解决方案非常有效: 我变了

 if "%serviceName:~0,7%" equ %namedSqlServerServiceNameBeginning% (


引号必须围绕两个你正在比较的东西<代码>%serviceName:~0,7%“eq%NamedSqlServerServiceNameBeging%应为
%serviceName:~0,7%“eq”%NamedSqlServerServiceNameBeging%“
。您需要确认是否希望
%mssqlDependenties%
包含
/MSSQLSERVER
/MSSQLRANDOM1/MSSQLRANDOM2/MSSQLRANDOM3
,或可能包含
/MSSQLSERVER/MSSQLRANDOM1/MSSQLRANDOM2/MSSQLRANDOM3
,或
/MSSQLRANDOM1/MSSQLRANDOM2/MSSQLRANDOM3/MSSQLSERVER
。如果存在
MSSQLSERVER
,那么这就是您想要的吗,还是您需要将它们全部列出,而不管找到的是哪一个或有多少个?您的问题还询问了流程,但这些都是服务。你到底想达到什么目的?这些服务/流程应该是全部吗?只有那些正在运行的?等等。您的代码位于括号内的代码块中。任何设置或更改的变量都需要用延迟扩展引用。@SomethingDark除非编辑文章,否则变量
NamedSqlServerServiceNameBeging
已经有双引号。
if
语句只应缺少前导双引号。它还需要延迟扩展
if“!serviceName:~0,7!”eq%namedsqlserverservicenamebeging%
和'if”%serviceName:~0,7%”eq%namedsqlserverservicenamebeging%('I receive'命令的语法不正确。'error。还有'if”%serviceName:~0,7%“eq”%namedsqlserverservicenamebeging%”我得到了(此时出现意外情况。)错误。
if "!serviceName:~0,7!" equ %namedSqlServerServiceNameBeginning% (