Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理脚本无法将变量设置为命令结果_Batch File - Fatal编程技术网

Batch file 批处理脚本无法将变量设置为命令结果

Batch file 批处理脚本无法将变量设置为命令结果,batch-file,Batch File,我有下面的批处理脚本,它尝试停止两个服务(按顺序),等待并确保它们都已停止,然后启动第一个服务。第一个服务与第二个服务有依赖关系。这是命令停止它们的原因,也是其中只有一个被启动的原因 发出stop命令后,服务可能需要一段时间才能停止,因此我需要等待并确保它们已停止,然后再尝试重新启动它们。这就是我想到的: set FirstServiceName="SrvcOne" set SecondServiceName="SrvcTwo" set findStop=find /i "STOPPED" s

我有下面的批处理脚本,它尝试停止两个服务(按顺序),等待并确保它们都已停止,然后启动第一个服务。第一个服务与第二个服务有依赖关系。这是命令停止它们的原因,也是其中只有一个被启动的原因

发出stop命令后,服务可能需要一段时间才能停止,因此我需要等待并确保它们已停止,然后再尝试重新启动它们。这就是我想到的:

set FirstServiceName="SrvcOne"
set SecondServiceName="SrvcTwo"

set findStop=find /i "STOPPED"
set GetFirstServiceState=sc query %FirstServiceName%
set GetSecondServiceState=sc query %SecondServiceName%

:sub_StopServices    
set "FirstServiceState=^"^""
for /f "delims=" %a in ('%GetFirstServiceState%^|%findStop%') do @set FirstServiceState=%a
if "%FirstServiceState%"=="" (net stop %FirstServiceName%)
set "SecondServiceState=^"^""
for /f "delims=" %a in ('%GetSecondServiceState%^|%findStop%') do @set SecondServiceState=%a
if "%SecondServiceState%"=="" (net stop %SecondServiceName%)

if "%FirstServiceState%" neq "" (if "%SecondServiceState%" neq "" (GOTO sub_StartServices) else (GOTO sub_StopServices)) else (GOTO sub_StopServices)

:sub_StartServices
net start %FirstServiceName%

exit
我在上面的代码中遇到的问题是,脚本在的第一行
处停止
对于/f“delims=“%a in(“%GetFirstServiceState%”中的(“%GetFirstServiceState%”^ |%findStop%”)do@set FirstServiceState=%a

除了
GetFirstServiceStatefindStopa此时意外出现

当然,这对我来说也是出乎意料的,因为当我手动运行该行时,它成功了!并且,假设服务已经停止,我从
sc查询
的响应中获得
状态

为什么在手动运行时,而在批处理脚本中运行时,此功能不起作用?


请注意,在
设置“FirstServiceState=^”^“
行中,我基本上清除了该变量的值。当我手动运行上面的行(不工作的行)并且服务
状态未停止时,该变量值不受影响。。。我希望它为空或有一个空字符串,但事实并非如此。它只是保持相同的值。因此,在测试之前,我将该值设置为双引号。

的/?
以及要在批处理文件中使用此命令,应转义可替换参数中使用的百分号的状态,在批处理文件中使用
%%a
而不是
%a

可替换参数的
需要转义百分号,因此,
%a
变为
%%a
。你试过这种方法吗?@MCND我没有。。。这似乎成功了。如果你把你的评论作为答案,我会把它标记为答案