2017-02-16 226 views
1

我試圖創建一個批處理文件來檢查您的計算機的名稱,然後它會將您的IP地址設置爲該計算機的相應IP地址。在IF語句(windows批處理文件)中設置變量

我有一個名爲IPAddress的變量來存儲新的IP地址。然後我有一個IF語句來檢查計算機名稱並分配新的IP地址。我的問題是,在IF語句中,當我將IPAddress變量設置爲我想要的新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" Computer 
New IP Address: 192.168.1.1 
Press any key to continue . . . 

我不明白爲什麼IF語句沒有按裏面的SET語句似乎沒有工作。

任何想法?

在此先感謝!

+2

閱讀數千個問題之一tions/answers with'delayed expansion'指代括號中的(代碼塊),其中cmd.exe在進入塊時評估變量。要獲得實際值,您需要強制延遲擴展。 – 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區塊