Batch file 如何在管道中涉及的FOR循环中设置变量?

Batch file 如何在管道中涉及的FOR循环中设置变量?,batch-file,for-loop,pipe,environment-variables,Batch File,For Loop,Pipe,Environment Variables,我知道这个问题已经被问过很多次了,但我已经读了好几个小时的答案,并且尝试了所有的方法,似乎没有任何效果。基本上,我无法成功地(重新)设置for/F循环中的变量 我想做以下工作:检查两台计算机之间的连接,如果连接不再存在,则执行一个操作(基本上启动一个程序) @ECHO OFF SET _A=0 PING localhost | (for /F "tokens=*" %%a in ('FINDSTR Reply') DO @ECHO %%a & SET _A=1) if %_A%==

我知道这个问题已经被问过很多次了,但我已经读了好几个小时的答案,并且尝试了所有的方法,似乎没有任何效果。基本上,我无法成功地(重新)设置for/F循环中的变量

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

@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命令没有返回至少一次单词“Reply”,那么连接就丢失了

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


有人知道我做错了什么吗?非常感谢你的帮助。我真的尝试了一切,包括
setlocalenabledelayedexpansion
和在
之间放置变量,但没有任何效果,它总是打印“失败”而从不打印“成功”。

这是一个伟大的问题!问题在于管道
|
,因为这会初始化两侧的单独术语临时
cmd
实例。变量
\u A
设置在正确的实例中,但随后丢失

如果您这样做:

for /F "tokens=*" %%a in ('PING localhost ^| FINDSTR Reply') do @ECHO %%a & SET _A=1
它将在批处理脚本运行的主
cmd
实例中执行
set
命令时工作


请注意转义管道
^ |
,这是将其执行转移到
cmd
实例所必需的,该实例是由
for/F
为其解析的命令行创建的。

这确实有意义。非常感谢您的回答和解释!祝你一切顺利。