求一批处理。IP地址:10.11.102.58,能够通过ipconfig /release后接ipconfig /renew重新由DHCP分配新的地址

由於IP地址冲突,需要这两个命令循环去获得一个新的IP地址,具体过程如下:通过ipconfig /release删除原有IP,然後ipconfig /renew重新获得一个IP,如果新获得IP等於原IP,则重新执行上述两条命令,直到获得IP地址不相同,才跳出程序,并将获得的新IP地址记录到D:\ip.txt文件下

以下代码适用于DHCP环境

@echo off
rem 获取现在的IP地址保存到变量ip中
for /f "tokens=2 delims=:" %%i in ('ipconfig ^|find "IP Address"') do set ip=%%i
rem 开始循环
:loop
rem 释放当前地址
ipconfig /release
rem 等待3秒
ping 127.1 >nul
rem 重新获取地址并保存到变量newip中
for /f "tokens=2 delims=:" %%i in ('ipconfig /renew ^|find "IP Address"') do set newip=%%i
rem 如果未获得新的ip(比如本地连接未开启DHCP),则报错后退出
if "%newip%"=="" echo ipconfig /renew失败,退出!& goto :eof
rem 如果新的ip和原ip相同则继续下一次循环
if "%ip%"=="%newip%" goto :loop
rem 否则输出新ip到文件
echo %newip% > d:\ip.txt
pause

但是我不建议采用以上代码解决IP地址冲突问题
而建议在DHCP服务器上开启IP地址冲突检测追问

请问兄弟’tokens‘与‘delims’一般是用在什么地方呢,^|find前的^符号主要是起什么作用呢?

追答

tokens和delims是for/f的专用关键字
主要是为了提取for/f的文本内容的信息的
delims确定用哪些字符去切分文本的每一行
tokens确定切分后提取每一行的哪几个字符串
那个^符号是个转义符号
它告诉for/f之外的cmd后面的|只是一个普通字符
不可以当作管道符号来理解
而在for/f内部的cmd中
因为^已经被脱去
所以剩下的|会被理解为管道符号

温馨提示:答案为网友推荐,仅供参考
相似回答