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 不同意。

这如此重要的原因是因为我无法判断该值是否正确以供将来在其余代码中使用,我在其中实现它以在远程系统中制定不同的批处理。

任何帮助将非常感激!

4

1 回答 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,请参阅此链接了解更多详细信息。

于 2012-12-05T22:28:45.570 回答