Board logo

标题: [网络连接] [已解决]小白,求一个修改IP的批处理。 [打印本页]

作者: yyjeje    时间: 2014-9-17 18:14     标题: [已解决]小白,求一个修改IP的批处理。

本帖最后由 yyjeje 于 2014-9-19 13:09 编辑

我有开机维护通道,现在要批量修改一批机器的IP,把现有IP最后一位都增加100就可以。
如192.168.0.1 变成192.168.0.101……
   192.168.0.50变成192.168.0.150


获得当前机器的IP,然后将得到的IP最后一位加100得到新IP,然后更改当前机器旧IP为新得到的IP。
作者: CrLf    时间: 2014-9-17 22:03

本帖最后由 CrLf 于 2014-9-18 16:38 编辑

最后一位 +100 后大于 255 真的不要紧吗?
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (IP列表.txt) do (
  3.    set n=%%~xa&set /a n=!n:~1!+100
  4.    echo %%~na.!n!
  5. ))>输出.txt
复制代码

作者: yyjeje    时间: 2014-9-18 10:43

回复 2# CrLf


    恩,我知道的,我就1-110号的机器 加100也没255,
上面这个代码运行了没变化啊~!
作者: Linuxer    时间: 2014-9-18 10:55

回复 2# CrLf


    他是想直接修改IP的。我理解是这样,先获取本机IP的最后一位,然后加100,组成新的IP,再修改成本机的IP。不过我想不出来咋写。
作者: Batcher    时间: 2014-9-18 12:30

回复 4# Linuxer


    试试 netsh 命令
作者: Linuxer    时间: 2014-9-18 13:48

本帖最后由 Linuxer 于 2014-9-18 15:31 编辑

回复 5# Batcher


   嗯,主要是前边截取字符,一时没想出怎么弄。
参考了下之前的帖子,写了一段,还请batcher帮我看看对不对,有没有哪里写的不好,我测试是可以用了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr /i "IPv4"') do (
  4. set ip=%%i
  5. set ip_1=!ip:.= !
  6. call :ip_addr !ip_1!
  7. )
  8. goto :eof
  9. :ip_addr
  10. set /a ip_2=%4+100
  11. set ip_3=%1.%2.%3.!ip_2!
  12. netsh interface ip set address "本地连接" static %ip_3% 255.255.255.0
  13. pause
复制代码
call命令的调用方法参考了if_exist版主的思路:
http://www.bathome.net/redirect. ... 8&fromuid=67350
作者: Linuxer    时间: 2014-9-18 13:51

回复 3# yyjeje


    你看下6楼代码能否实现你的要求。
作者: Batcher    时间: 2014-9-18 14:01

回复 6# Linuxer


不要把 :ip_addr 的那一段放在 for 循环内部
作者: Linuxer    时间: 2014-9-18 14:20

本帖最后由 Linuxer 于 2014-9-18 14:21 编辑

回复 8# Batcher


    我修改了,但是现在代码echo !ip_3!测试正常,但是后边又会多执行一次,不知道是怎么回事。。
[attach]7684[/attach]
作者: Batcher    时间: 2014-9-18 14:59

回复 9# Linuxer


    for命令执行完毕以后会继续往下执行 :ip_addr 那一段,所以for命令结束之后需要有个 goto 跳过 :ip_addr
作者: Linuxer    时间: 2014-9-18 15:34

回复 10# Batcher


    啊,原来如此。。我在for后边加一个goto :eof退出这样就ok了。
另外,我在for里只执行set设置ip的命令,其他几句都搬到for外边,是不是和在for里边没区别?没什么影响的吧?我测试结果是一样的。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr /i "IPv4"') do (set ip=%%i)
  4. set ip_1=!ip:.= !
  5. call :ip_addr !ip_1!
  6. goto :eof
  7. :ip_addr
  8. set /a ip_2=%4+100
  9. set ip_3=%1.%2.%3.!ip_2!
  10. netsh interface ip set address "本地连接" static %ip_3% 255.255.255.0
  11. pause
复制代码

作者: Batcher    时间: 2014-9-18 23:16

回复 11# Linuxer


    ipconfig有可能返回多条IPv4的记录
作者: yyjeje    时间: 2014-9-19 12:32

回复 11# Linuxer


    我是XP系统 机器IP是192.168.0.20

运行后提示  ....100 不是 addr 的可接受值。

去掉@echo off
后发现,在set /a 这里 有问题 没有得出 ip_3


我这里百度了一段代码 能得到IP最后一位数.
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| find/i "ip address"')do for /f "tokens=4 delims=." %%b in ("%%a") do echo %%b

不过我自己怎么加代码都出错 小白没法啊.  这个%%b 怎么加100 ,  变成192.168.0.new
作者: Linuxer    时间: 2014-9-19 12:34

回复 12# Batcher


    嗯,如果有线无线都开着,或者有虚拟机网卡,都会查出多个地址。还有什么命令可以更准确的或得IP呢?
看楼主的说明,应该基本都是一个ip的了。
作者: Linuxer    时间: 2014-9-19 12:38

回复 13# yyjeje

win7识别的是“IPv4 地址“
XP里边是"ip address"

用下边的试试。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr /i "ip address"') do (set ip=%%i)
  4. set ip_1=!ip:.= !
  5. call :ip_addr !ip_1!
  6. goto :eof
  7. :ip_addr
  8. set /a ip_2=%4+100
  9. set ip_3=%1.%2.%3.!ip_2!
  10. netsh interface ip set address "本地连接" static %ip_3% 255.255.255.0
  11. pause
复制代码

作者: yyjeje    时间: 2014-9-19 13:07

回复 15# Linuxer


    谢谢 可以了。

我自己也组合了一段代码出来,效果差不多
  1. FOR /F "tokens=2*" %%i IN ('ipconfig/all^|find /i "Ethernet adapter "') DO set name=%%j
  2. FOR /F "tokens=1* delims=:" %%i in ("%name%") do set 网卡名称=%%i
  3. for /f "tokens=2 delims=:" %%a in ('ipconfig ^| find/i "ip address"')do for /f "tokens=4 delims=." %%b in ("%%a") do
  4. set ipa=%%b
  5. set /a aa=ipa+100
  6. set ipb=192.168.0.%aa%
  7. netsh -c interface ip set address name="%网卡名称%" source=static addr=%ipb% mask=255.255.255.0
  8. pause
复制代码
再次感谢。
作者: hnldwhm52    时间: 2014-9-19 14:42

xiexieixiexi!!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2