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