如何通过批处理脚本接收具有名称的进程
Posted
技术标签:
【中文标题】如何通过批处理脚本接收具有名称的进程【英文标题】:How to receive a processes that with name via a batch script 【发布时间】: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%" 我得到了“(此时是意外的。”错误。
【参考方案1】:
来自 avery_larry 的解决方案完美运行: 我变了
if "%serviceName:~0,7%" equ %namedSqlServerServiceNameBeginning% (
到
if "!serviceName:~0,7!" equ %namedSqlServerServiceNameBeginning% (
【讨论】:
以上是关于如何通过批处理脚本接收具有名称的进程的主要内容,如果未能解决你的问题,请参考以下文章