2017-02-16 232 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区块