如何利用DOS的%computername%变量通过IF语句设置静态IP
DOS 批处理实现代码
直接创建一个setip.bat文件,粘贴以下代码:
@echo off :: 关闭命令回显,让输出更干净 set "nicName=Ethernet0" :: 设置网卡名称,根据实际情况修改 :: 不区分大小写匹配主机名 if /i "%COMPUTERNAME%"=="PC201" ( netsh interface ipv4 set address name="%nicName%" static 192.168.110.11 255.255.255.0 192.168.100.254 goto end ) if /i "%COMPUTERNAME%"=="PC202" ( netsh interface ipv4 set address name="%nicName%" static 192.168.110.12 255.255.255.0 192.168.100.254 goto end ) if /i "%COMPUTERNAME%"=="PC203" ( netsh interface ipv4 set address name="%nicName%" static 192.168.110.13 255.255.255.0 192.168.100.254 goto end ) echo 未匹配到预设的主机名,未执行IP设置 :end exit /b
关键说明
if /i实现不区分大小写的主机名匹配,避免大小写差异导致匹配失败nicName变量统一管理网卡名称,后续修改只需改一处- 每个分支执行完IP设置后通过
goto end跳转到结束,避免执行后续判断
PowerShell 实现代码
创建一个Set-StaticIP.ps1文件,粘贴以下代码:
$nicName = "Ethernet0" $gateway = "192.168.100.254" $subnetMask = "255.255.255.0" switch -CaseSensitive:$false ($env:COMPUTERNAME) { "PC201" { $ipAddress = "192.168.110.11" break } "PC202" { $ipAddress = "192.168.110.12" break } "PC203" { $ipAddress = "192.168.110.13" break } default { Write-Host "未匹配到预设主机名,跳过IP设置" exit } } # 使用netsh执行设置(和DOS逻辑一致) netsh interface ipv4 set address name=$nicName static $ipAddress $subnetMask $gateway # 或者用PowerShell原生命令(推荐,更符合PowerShell规范) # Get-NetAdapter -Name $nicName | Set-NetIPAddress -IPAddress $ipAddress -PrefixLength 24 -DefaultGateway $gateway
关键说明
switch -CaseSensitive:$false实现不区分大小写匹配- 变量集中管理网关、子网掩码,便于统一修改
- 可选使用PowerShell原生命令
Set-NetIPAddress,比netsh更适合PowerShell环境
通用注意事项
- 管理员权限:无论用批处理还是PowerShell,都需要右键选择「以管理员身份运行」,否则会因权限不足执行失败
- 网卡名称验证:执行
netsh interface ipv4 show interfaces(DOS/PowerShell都可)查看实际网卡名称,避免因名称错误导致设置失败 - 测试建议:可以先把
netsh命令换成echo,比如echo netsh ...,先验证主机名匹配逻辑是否正确,再执行真实设置
内容的提问来源于stack exchange,提问作者tommyketchup
相关产品推荐
相关产品推荐

