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

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% (

【讨论】:

以上是关于如何通过批处理脚本接收具有名称的进程的主要内容,如果未能解决你的问题,请参考以下文章

如何通过批处理脚本检查是否正在运行多个进程

如何在脚本中获取进程ID

通过进程 ID 查找进程名称 [关闭]

NANT 复制所有具有相似名称的文件

根据名称复制文件的批处理脚本

当脚本在多处理工作人员中运行异步事件循环时,通过子进程运行脚本会挂起