在IF语句中设置变量(windows批处理文件)

时间:2017-02-16 20:27:08

标签: batch-file

我试图创建一个批处理文件来检查您计算机的名称,然后将您的IP地址设置为该计算机的相应IP地址。

我有一个名为IPAddress的变量,用于存储新的IP地址。然后我有一个IF语句来检查计算机名称并分配新的IP地址。我的问题是在IF语句中,当我将IPAddress变量设置为我想要的新IP时,它并不坚持。当我在设置之后尝试回显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语句似乎无法正常工作。

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分:1)

@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