Batch file 如何在管道中涉及的FOR循环中设置变量?
我知道这个问题已经被问过很多次了,但我已经读了好几个小时的答案,并且尝试了所有的方法,似乎没有任何效果。基本上,我无法成功地(重新)设置for/F循环中的变量 我想做以下工作:检查两台计算机之间的连接,如果连接不再存在,则执行一个操作(基本上启动一个程序)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%==
@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
为其解析的命令行创建的。这确实有意义。非常感谢您的回答和解释!祝你一切顺利。