Batch file 从FOR循环在批处理文件中生成变量

Batch file 从FOR循环在批处理文件中生成变量,batch-file,Batch File,我想构建一个字符串,用作命令行实用程序中的参数。该字符串将根据我在变量中定义的某些服务的存在来构建。到目前为止,我有以下代码: @ECHO关闭 SETLOCAL ENABLEDELAYEDEXPANSION 设置“PRODS=service1service2service3” 让我们看看安装了什么。 设置新产品= 对于%%i in(%PRODS%)DO( %comspec%/c%WINDIR%\system32\sc.exe查询%%i |%WINDIR%\system32\findstr/c:“

我想构建一个字符串,用作命令行实用程序中的参数。该字符串将根据我在变量中定义的某些服务的存在来构建。到目前为止,我有以下代码:

@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
设置“PRODS=service1service2service3”
让我们看看安装了什么。
设置新产品=
对于%%i in(%PRODS%)DO(
%comspec%/c%WINDIR%\system32\sc.exe查询%%i |%WINDIR%\system32\findstr/c:“正在运行”>nul
如果不是错误级别1(
设置新产品=%%i
ECHO!新产品!
)
)

我如何使输出(假设服务1和3已找到并正在运行)像这样:Service1,Service3

提前谢谢

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "PRODS=Service1 Service2 Service3"
REM Let's see what's installed.
SET "NEWPRODS="
FOR %%i in (%PRODS%) DO sc.exe query %%i | findstr /C:"RUNNING">nul && SET "NEWPRODS=!NEWPRODS!%%i,"

REM Trim trailing comma if string is not empty
IF NOT "%NEWPRODS%"=="" SET "NEWPRODS=%NEWPRODS:~0,-1%"
ECHO(%NEWPRODS%
pause
不要这样做

echo %SomeVariable%
如果变量为空,它将显示当前回波状态。
在设置字符串时使用引号,这样就不会得到任何意外的空格。

因此您希望变量
NEWPRODS
能够按字面意思保存一个字符串,如
Service1,Service3
?是的,这就是想法。我只需要从我指定的列表中找到并运行的服务的分隔列表。感谢您的响应,但这并没有用我期望的值填充变量(甚至根本没有)——即使没有Trim部分。它对我有效。大概你用合法的服务名称替换了Service1-3,它们正在运行???你是对的。我没有将服务名称替换为在为帖子擦洗它们之后应该使用的名称。您的解决方案确实有效,再次感谢您!伟大的欢迎光临。我们都犯过这样的错误:)如果您对答案感到满意,请注明答案。