【发布时间】:2020-07-23 18:59:01
【问题描述】:
我需要接收名称等于“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.
mssqlDependenties 应包含 MSSQLSERVER/MSSQL$1/MSSQL$2/MSSQL$3 等。
【问题讨论】:
-
引号需要围绕您要比较的两个内容。
%serviceName:~0,7%" equ %namedSqlServerServiceNameBeginning%应该是"%serviceName:~0,7%" equ "%namedSqlServerServiceNameBeginning%"。 -
您需要确认您是否希望
%mssqlDependenties%包含/MSSQLSERVER或/MSSQLRANDOM1/MSSQLRANDOM2/MSSQLRANDOM3,或者可能包含/MSSQLSERVER/MSSQLRANDOM1/MSSQLRANDOM2/MSSQLRANDOM3,或/MSSQLRANDOM1/MSSQLRANDOM2/MSSQLRANDOM3/MSSQLSERVER。如果MSSQLSERVER存在,这就是您想要的,还是无论找到哪个或多少,您都需要它们全部列出吗?您的问题还涉及流程,但这些是服务。你到底想达到什么目的?这些服务/流程应该是全部吗?只有那些正在运行的?等 -
您在括号内的代码块中。任何设置或更改的变量都需要通过延迟扩展来引用。
-
@SomethingDark 除非帖子被编辑,否则变量
namedsqlserverservicenamebeginning已经有双引号。if语句应该只缺少前导双引号。而且它还需要延迟扩展if "!serviceName:~0,7!" equ %namedSqlServerServiceNameBeginning% -
with 'if "%serviceName:~0,7%" equ %namedSqlServerServiceNameBeginning% (' I receive "The syntax of the command is wrong." error. and with 'if "%serviceName:~ 0,7%" equ "%namedSqlServerServiceNameBeginning%" 我得到了“(此时是意外的。”错误。
标签: batch-file cmd sc