batch-file - 在IF语句中设置变量(Windows批处理文件)

标签 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语句似乎不起作用。

有任何想法吗?

提前致谢!

最佳答案

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

关于batch-file - 在IF语句中设置变量(Windows批处理文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283939/

相关文章:

apache - 是可执行文件可靠地返回的ERRORLEVEL,可用于批处理脚本中的错误处理

batch-file - 等待输入 BATCH

c# - 如何在 Asp.net Web 服务器端启动 bat 文件?

batch-file - 在新窗口中从批处理运行批处理文件?

batch-file - 从路径中删除当前工作目录

batch-file - 如何使用通过批处理文件调用的程序打开非特定文件?

batch-file - 命名参数如何传递给批处理文件?

windows - 从批处理文件中仅在日志文件中输出某些结果

windows - 为什么我得到 The following usage of the path operator in batch-parameter substitution is invalid

windows - 计算日期 -10 天