批处理文件中的IP配置

时间:2014-02-17 08:34:18

标签: batch-file networking ipv4

@echo off

set /p option=(1) Edit IP (2) Enable DHCP:

if %option%==1 (

set /p IP=New IP-Address:
set /p MASK=New Network Mask:
set /p GATE=New Gateway Address:

netsh interface ip set address name="LAN" static %IP% %MASK% %GATE% 1
)

if %option%==2 (

netsh interface ip set address name="LAN" source=dhcp
)

pause

程序的DHCP部分工作得很好。 NIC的名称是“LAN”。我已尝试在设置IP上使用和不使用1参数。我也试过不同的变量名。

输入有效的ipv4地址,子网掩码和网关地址后得到的错误是:

无效地址参数< 1>:必须是有效的IPv4地址

1 个答案:

答案 0 :(得分:1)

你的问题是延迟扩张。在块开始执行之前,代码块内的所有变量读取(括号内的代码)将替换为变量中的值。如果在块内部更改了变量,则无法检索该新值,因为对变量的所有读取都替换为值。要解决此问题,请启用延迟扩展,并在需要延迟读取的变量中,使用!var更改%var%sintax!指示解析器将读取延迟到执行时间。

@echo off

set /p option=(1) Edit IP (2) Enable DHCP:

if %option%==1 (
    set /p IP=New IP-Address:
    set /p MASK=New Network Mask:
    set /p GATE=New Gateway Address:

    setlocal enabledelayedexpansion
    netsh interface ip set address name="LAN" static !IP! !MASK! !GATE! 1
    endlocal
)

if %option%==2 (
    netsh interface ip set address name="LAN" source=dhcp
)

pause