我正在尝试制作一个批处理文件,该文件将检查您计算机的名称,然后将您的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
Run Code Online (Sandbox Code Playgroud)
我在“ BRIDGE”计算机上,得到以下输出:
"BRIDGE" Computer
New IP Address: 192.168.1.1
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
我不明白为什么IF语句中的SET语句似乎不起作用。
有任何想法吗?
提前致谢!
您可以使用延迟扩展,也可以简化脚本以调用不受当前扩展限制的外部标签。
简化脚本:
@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
Run Code Online (Sandbox Code Playgroud)
延迟扩展的旧脚本:
@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
Run Code Online (Sandbox Code Playgroud)
@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
Run Code Online (Sandbox Code Playgroud)
正如已经指出的,您的原始代码需要延迟扩展,或者只是将其echo移出if块