ECHO命令没有显示变量,尽管它们出现在SET命令中 - Windows批处理文件

3

在我正在处理的一些代码中,我需要连接到一个终端,这需要终端的IP地址。以下是部分代码:

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

然而,在这样做后,Echo会回复如下信息:
ECHO is off

作为一个测试,我只是在ECHO %TERMINAL%行后面添加了SET,并根据它:

TERMINAL=10.123.45.6

所以,我的困境在于,根据SET,TERMINAL确实有一个值,但ECHO不同意。

这个问题很重要的原因是,我无法确定该值是否正确,以便在代码的其余部分中使用它来执行远程系统中的不同批处理。

非常感谢任何帮助!

1个回答

1

我相信原因是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运行脚本,这有助于理解正在发生的事情。

更新

您可以尝试使用Setlocal EnableDelayedExpansion来获取所需的行为,请参见this link以获取更多详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接