我正在处理一个批处理脚本,该脚本将获取服务器列表,遍历服务器,在每个服务器上查找以特定值开头的每个服务,并查询该服务。但是,鉴于可以使用空格创建服务名称,因此我需要能够在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失败1060: 指定的服务不存在为已安装的服务。“
当我允许脚本回显时,我看到以下内容: HO AdobeARM服务 “ \ [服务器名]查询” AdobeARMservice
答案 0 :(得分:1)
主要问题是由于wmic
的输出中有空格和回车符。如果在代码中与%%b
的行中的echo
周围加上引号,则会看到输出中缺少右引号。
工作代码:
@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%"
)
)