我知道这个问题已被问过很多次,但我已经阅读了几个小时的答案并尝试了所有方法,但似乎没有任何效果。基本上我无法在 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”有效,但它不会重置变量“_A”。我需要这个变量在 FOR 循环之外,因为之后“if %_A%==1”将只需要执行一次程序。
有人知道我做错了什么吗?非常感谢你的帮助。我真的尝试了所有方法,包括 setlocal enabledelayedexpansion
和在 !!
之间放置变量,但没有任何效果,它总是打印“FAIL”而不是“SUCCESS”。
最佳答案
这是一个很好的问题!问题是管道 |
因为这会为双方初始化单独的临时 cmd
实例。变量 _A
在正确的实例中设置,但之后丢失。
如果你这样做:
for /F "tokens=*" %%a in ('PING localhost ^| FINDSTR Reply') do @ECHO %%a & SET _A=1
它将起作用,因为 set
命令位于运行批处理脚本的主 cmd
实例中。
注意 escaped 管道 ^|
,这是将其执行转移到 for/F 创建的
用于它解析的命令行。cmd
实例所必需的
关于batch-file - 如何在管道中涉及的 FOR 循环中设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37013512/