如何在批量中将引号放在 For 循环的变量周围?



我正在处理一个批处理脚本,该脚本将获取服务器列表,遍历它们,找到每台服务器上以特定值开头的每个服务,然后查询该服务。但是,鉴于服务名称可以用空格创建,我需要能够在 for 变量周围加上引号。最好的方法是什么?

我已经尝试了各种在变量之前和之后放置转义字符的方法。我还尝试将循环变量设置为单独的变量。

@ECHO off
ECHO Please list servers to query.
SET list=
SET /P list=Server Names:
FOR %%a IN (%list%) DO (
FOR /F "Skip=1 Delims-" %%b IN ('wmic service where "name like 'ADOBE%%'" get Name ^| findstr /r /v "^$"') DO (
ECHO %%b
sc \%%a query ^"%%b^"
)
)
pause
GOTO :eof

输出显示在 %list 中输入的其中一台服务器上以"ADOBE"开头的任何服务的服务名称。

我得到的是"EnumQueryServiceStatus:OpenService FAILED 1060: 指定的服务不作为已安装的服务存在。

当我允许脚本回显时,我看到以下内容: HO AdobeARMservice " \[服务器名称] 查询 "AdobeARMservice

主要问题是由于wmic的输出中的空格和回车符。如果在代码中echo行中%%b周围添加引号,则会看到输出中缺少结束引号。

工作代码:

@echo off
setlocal enabledelayedexpansion
FOR /F "Skip=1 Delims=" %%b IN ('wmic service where "name like 'ADOBE%%'" get Name ^| findstr /r /v "^$"') DO (
for /f "delims=" %%c in ("%%b") do ( rem this will get rid of CR character
set d=%%c
:loop
if "!d:~-1!"==" " ( rem here we'll remove the trailing spaces
set d=!d:~0,-1!
goto :loop
)
echo "%d%"
sc query "%d%"
)
)

最新更新