2016-05-03 37 views
3

我知道这个问题已被多次询问,但我已经阅读了几个小时的答案,并尝试了一切,似乎没有任何工作。基本上我不能成功(重新)在for/F循环中设置一个变量。如何在涉及管道的FOR循环中设置变量?

我想做以下事情:检查两台计算机之间的连接,并做一个动作(基本上启动一个程序),如果连接不再存在。

@ECHO OFF 

SET _A=0 

PING localhost | (for /F "tokens=*" %%a in ('FINDSTR Reply') DO @ECHO %%a & SET _A=1) 

if %_A%==0 ECHO %_A% FAIL 
if %_A%==1 ECHO %_A% SUCCESS 

PAUSE 

在这里,我认为如果ping命令没有返回至少一次的单词“回复”,那么连接丢失。

第一个“DO @ECHO %% a”起作用,但不会重置变量“_A”。我需要这个变量在FOR循环外部,因为之后“if%_A%== 1”将只能执行一次程序。

任何人都知道我在做什么错?非常感谢你的帮助。我真的尝试了一切,包括setlocal enabledelayedexpansion,并在!!之间放置变量,但没有任何作用,它总是打印出“失败”并且从来没有“成功”。

回答

2

这是一个很好的问题!问题是管道|,因为这会初始化双方的单独的实例cmd实例。变量_A设置为正确的实例,但之后丢失。

如果你这样做:

for /F "tokens=*" %%a in ('PING localhost ^| FINDSTR Reply') do @ECHO %%a & SET _A=1 

它会工作作为set命令在批处理脚本在运行主cmd实例

注意逃脱^|,这是必要的将其执行转移到由for /F为其分析的命令行创建的cmd实例。

+0

这真的很有道理。非常感谢你的回答和解释!祝一切顺利。 – ccflash