gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:26:05 24 4
gpt4 key购买 nike

我知道这个问题已被问过很多次,但我已经阅读了几个小时的答案并尝试了所有方法,但似乎没有任何效果。基本上我无法在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com