ECHO不显示variables,即使它们出现在SET – Windowsbatch file中

在我正在处理的一些代码中,我需要连接到一个需要terminalIP地址的terminal。 一些代码在这里:

FOR /F "Tokens=1" %%A IN (%IPLIST%) DO ( NET USE //%%A /user:name password SET TERMINAL=%%A ECHO %TERMINAL% ) 

但是,这样做后,Echo响应:

 ECHO is off 

作为一个testing,我简单地在ECHO%TERMINAL%Line之后添加SET,并根据它:

 TERMINAL=10.123.45.6 

所以,我的困境是,根据SET,TERMINAL确实有价值,但ECHO不同意。

之所以这么重要,是因为我不能确定这个值是否适合将来在其他代码中使用,在那里我实现它来在远程系统中执行不同的批处理。

任何帮助将非常感激!

我相信的原因是FOR被评估为一个单一的命令,环境变量在执行前展开,所以在你的情况下,它将像这样运行:

 FOR /F "Tokens=1" %A IN (<%IPLIST% value>) DO ( NET USE //%A /user:name password SET TERMINAL=%A ECHO <%TERMINAL% value> ) 

由于%TERMINAL%FOR之前不存在,所以它将被扩展为一个空字符串,因此被观察到的行为。

试着用@echo on运行脚本,它有助于理解发生了什么。

UPDATE

您可以使用Setlocal EnableDelayedExpansion获得所需的行为,请参阅此链接以获取更多详细信息。