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 に答える