windows - SC Query 在 BATCH FILE 'FOR' 循环中使用时返回错误
问题描述
尝试在批处理文件 FOR 循环中使用以下代码行:
FOR /F "delims=" %%g IN ('sc query type=service ^| FIND /I "bthserv"') DO ( ECHO %%g )
从 CMD 提示符中使用时,括号中的命令可以成功运行。
但是,在 FOR 循环中,它只返回:
[SC] EnumQueryServicesStatus:OpenService 失败 123:
文件名、目录名或卷标语法不正确。
是否有人熟悉此错误以及如何让 FOR 循环报告具有特定或相似名称的所有服务?
[编辑 /]
即使将命令更改为此也会失败并显示相同的消息:
FOR /F "delims=" %%g IN ('sc query type^= service ^| FIND /I "bthserv"') DO ( ECHO %%g )
解决方案
首先,您的标题令人困惑,因为它queryex
不像query
您的代码那样使用。
除此之外query type=service
无效,应该是query type= service
, (后面的空格=
是必须的)。
但是,我也对您的命令感到有些困惑,我不确定您是否想知道是否有一个名为 的活动服务bthserv
,或者是否有一个名称包含不区分大小写的字符串的活动服务bthserv
。
如果您想知道是否有一个名为 的活动服务bthserv
,您应该只按名称查询它,query bthserv
. 从那里您可以简单地使用&&
and||
来处理成功和不成功的命令,(我刚刚使用了Echo
下面的命令)。
例子:
@%__AppDir__%sc.exe query bthserv 1> NUL && (Echo bthserv is an installed service) || Echo bthserv is not an installed service
或者,您可以使用ErrorLevel
.
例子:
@%__AppDir__%sc.exe query bthserv 1> NUL
@If ErrorLevel 1 (Echo bthserv is not an installed service)Else Echo bthserv is an installed service
如果您想知道是否存在名称包含不区分大小写的字符串 (不匹配) 的活动服务bthserv
,那么find命令就可以了。
但是,当您在for-loop中运行该命令时,该=
字符被实例视为分隔符cmd.exe
,该命令被传递给。因此,您需要使用插入符号来逃避它,^
. 除此之外,如果要捕获匹配的服务名称,则需要使用默认值 和TAB分隔符选择第一个标记之后的所有内容。
例子:
@For /F "Tokens=1,*" %%G In ('%__AppDir__%sc.exe query type^= service ^| %__AppDir__%find.exe /I "bthserv"') Do @Echo %%H
但是,您也可以将传递给cmd.exe
实例的整个字符串括在双引号中,而无需转义任何内容。
例子:
@For /F "Tokens=1,*" %%G In ('"%__AppDir__%sc.exe query type= service | %__AppDir__%find.exe /I "bthserv""') Do @Echo %%H
推荐阅读
- javascript - window.outerWidth 当标签不在焦点时等于 0
- css - 在 Bootstrap 中创建响应式卡片组
- google-cloud-platform - 成功上传几个小时后,在上传到 GCS 存储桶时获取服务帐户的访问令牌时出错
- windows - 适用于 Windows 的 Kafka 休息代理
- python - 如何使python脚本运行或目录中的所有文件?
- remark42 - 如何在没有社交登录的情况下以管理员身份登录 remark42 评论系统
- excel - 如何粘贴数据一定次数
- javascript - require.context 的 tsx 和 jsx 文件
- javascript - 我怎样才能去,通过按下反应中的按钮,铬扩展被重定向到另一个组件?
- node.js - 错误:使用电子包装器进行电子包装