2017-02-16 20 views
1

コンピュータの名前を確認するバッチファイルを作成しようとしています。そのIPアドレスをそのコンピュータの対応するIPアドレスに設定します。IFステートメント内の変数を設定します(Windowsバッチファイル)

私は、新しいIPアドレスを格納するIPAddressという変数を持っています。次に、コンピュータ名を確認して新しいIPアドレスを割り当てるIF文があります。私の問題は、IF文の中で、私が望む新しいIPアドレスにIPAddress変数を設定すると、それが固執しないということです。設定した直後にIPAddress変数をエコーすると、元の状態です。

ここに私のコードです:

@echo off 

SET IPAddress=192.168.1.1 

IF %computername%==TEST (
    ECHO "TEST" computer 
    SET IPAddress=192.168.1.50 
    ECHO New IP Address: %IPAddress% 
) ELSE IF %computername%==BRIDGE (
    ECHO "BRIDGE" Computer 
    SET IPAddress=192.168.1.25 
    ECHO New IP Address: %IPAddress% 
) 

pause 

私は「BRIDGE」コンピュータ上だと私はこの出力を得る:

"BRIDGE" Computer 
New IP Address: 192.168.1.1 
Press any key to continue . . . 

IF文の内部のSET文はdoesnの理由を私は理解できません働いているようだ。

アイデア?

ありがとうございます!

+2

何千もの質問を読むcmd.exeがブロックに入るときにvarsを評価する括弧内の(コードブロック)を参照して、 '遅延拡張 'を使用します。実際の値を取得するには、遅延拡張を強制する必要があります。 – LotPings

+0

トピック:あなたの乗り物は何ですか?私はDHではありません。主にXCとエンデューロ。後でコメントを削除します。 – Squashman

+0

@Squashmanそれは2000年から注文されたDH自転車です...だから少し古くなってきていますが、私はそれが大好きです。私はそれについて本当に良い取引をしました、そうでなければ私はそれを買っていないでしょう。 :) – Jyclop

答えて

0

delayed expansionを使用するか、スクリプトを簡略化して、現在の拡張の制限に拘束されていない外部ラベルを呼び出すことができます。

簡体スクリプト:

@echo off 
SET "IPAddress=192.168.1.1" 
IF "%computername%"=="TEST" (call :IPAddress "TEST" "192.168.1.50") else (IF "%computername%"=="BRIDGE" (call :IPAddress "BRIDGE" "192.168.1.25")) 
pause 
exit 

:IPAddress 
    ECHO "%~1" computer 
    SET "IPAddress=%~2" 
    ECHO New IP Address: %IPAddress% 
goto :EOF 

遅れ拡大と旧スクリプト:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

SET IPAddress=192.168.1.1 

IF %computername%==TEST (
    ECHO "TEST" computer 
    SET IPAddress=192.168.1.50 
    ECHO New IP Address: %IPAddress% 
) ELSE IF %computername%==BRIDGE (
    ECHO "BRIDGE" Computer 
    SET IPAddress=192.168.1.25 
    ECHO New IP Address: %IPAddress% 
) 

pause 
0
@echo off 

SET IPAddress=192.168.1.1 

IF %computername%==TEST (
    ECHO "TEST" computer 
    SET IPAddress=192.168.1.50 
) ELSE IF %computername%==BRIDGE (
    ECHO "BRIDGE" Computer 
    SET IPAddress=192.168.1.25 
) 

ECHO New IP Address: %IPAddress% 

pause 

としては、すでに指摘し、元のコードは遅延の拡大を必要とする、または単に外のechoを移動しますifブロック

関連する問題