首页 > 解决方案 > 如何在 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 Adob​​eARMservice " \[servername] query "AdobeARMservice

标签: batch-filefor-loopwindows-services

解决方案


主要问题是由于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%"
   )
)

推荐阅读