[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[已解决]50元求修复代码,关于ip设置的问题

本帖最后由 beck1321 于 2013-1-8 16:15 编辑

具体报酬:50元软妹币
支付方式:支付宝
联系方式:QQ511156969
有效期限:2013年2月之前。
需求描述:如下
  1. @echo off
  2. echo 正在为您设置IP,请稍等......
  3. set /A "a=%RANDOM%%%250+3
  4. set /A "b=%RANDOM%%%250+3
  5. set /A "c=%RANDOM%%%250+3
  6. netsh interface ip set address name="本地连接" source=static addr=10.%a%.%b%.%c% mask=255.0.0.0 >nul
  7. :start
  8. set /A "num=%RANDOM%%%190+10"
  9. ping 10.1.1.%num% -n 1 >nul
  10. arp -a |find "10.1.1.%num%" &&goto start
  11. netsh interface ip set address name="本地连接" source=static addr=10.1.1.%num% mask=255.255.255.0 gateway=10.1.1.250 gwmetric=0 | find "IP地址已在网络上使用" &&goto start
  12. netsh interface ip set dns "本地连接" source=static addr=10.1.1.100 register=primary >nul
  13. netsh interface ip add dns "本地连接" addr=8.8.8.8 >nul
  14. netsh interface ip set wins name="本地连接" source=static addr=10.1.1.100 >nul
  15. if %errorlevel% neq 0 goto start
复制代码
这段代码 其中
  1. set /A "num=%RANDOM%%%190+10"
  2. ping 10.1.1.%num% -n 1 >nul
  3. arp -a |find "10.1.1.%num%" &&goto start
复制代码
这一段至关重要,是为了arp-a 得到 这个随机的num 的ip是否已有mac 即是否已在使用 如果有 则 继续 goto start
如果没有 则 继续下面的 ip配置工作


问题:
xp运行 这个代码 是没问题的,经过测试,能够发现已有ip 而重新start
但win7不行  ,我把>nul去掉 看状态 ping了以后 直接就配置下面的操作了。 给人感觉都没有执行arp -a   find这条命令 ,我在win7单独运行arp -a 这一行 ,是有显示的。但不知为何 整个代码运行时就不出现了。

(支付方式仅限支付宝)


==============
问题已解决,款已付。
感谢"无名"英雄  我猜你是论坛的高层哦!
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

回复 23# beck1321


    论坛空间有限,尽量用外部存储吧。

TOP

乌啦啦乌啦啦 哇哇哭啦
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

操作录像

http://www.0515dafeng.com/test17.rar

144k的附件都传不上来啊 。。。悲剧哦
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

待会儿 我弄个录像
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

回复 20# BAT-VBS


   
我错了。。。之前17楼那个 不该是不停的 goto start的 可能是因为我去掉了一段空白段 导致的 后来我重新拿你的那段代码 只改了ip后 ,不会出现不停的goto start了 但问题依然是  遇到一个已占有ip 却无法跳过

下面是 那个log

其实就那几个字
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

能否把17楼生成的test.log压缩一下传上来看看?

TOP

netsh interface ip set dns "本地连接" source=static addr=10.1.1.100 register=primary
netsh interface ip add dns "本地连接" addr=8.8.8.8
netsh interface ip set wins name="本地连接" source=static addr=10.1.1.100

这一段也运行了,  
if %errorlevel% neq 0 goto start  是这个生效的 又重复去 goto start了
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

回复 17# BAT-VBS


    我的知识已经跟不上了 但复制这个代码去运行后 即使扩大num 也不停的在 goto start

且log文件 依旧是 未找到arp项
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

arp的输出用的2号句柄,这样写入文件试试:
  1. setlocal enabledelayedexpansion
  2. echo 正在为您设置IP,请稍等......
  3. set /A "a=%RANDOM%%%250+3
  4. set /A "b=%RANDOM%%%250+3
  5. set /A "c=%RANDOM%%%250+3
  6. netsh interface ip set address name="本地连接" source=static addr=10.%a%.%b%.%c% mask=255.0.0.0
  7. :start
  8. set /A "num=%RANDOM%%%190+10"
  9. ping 10.1.1.%num% -n 1
  10. rem arp -a |find "10.1.1.%num%" &&goto start
  11. arp -a >test.log 2>&1
  12. %systemroot%\system32\arp.exe -a | %systemroot%\system32\find.exe "10.1.1.%num%"
  13. echo !errorlevel!
  14. if !errorlevel! equ 0 (
  15.     goto :start
  16. )
  17. netsh interface ip set address name="本地连接" source=static addr=10.1.1.%num% mask=255.255.255.0 gateway=10.1.1.250 gwmetric=0 | find "IP地址已在网络上使用" &&goto start
  18. netsh interface ip set dns "本地连接" source=static addr=10.1.1.100 register=primary
  19. netsh interface ip add dns "本地连接" addr=8.8.8.8
  20. netsh interface ip set wins name="本地连接" source=static addr=10.1.1.100
  21. if %errorlevel% neq 0 goto start
复制代码

TOP

回复 15# BAT-VBS


    log里就几个字 未找到arp项

但我在运行前后都单独输入cmd命令 arp -a 看了下 都是有东东在里面的
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

  1. setlocal enabledelayedexpansion
  2. echo 正在为您设置IP,请稍等......
  3. set /A "a=%RANDOM%%%250+3
  4. set /A "b=%RANDOM%%%250+3
  5. set /A "c=%RANDOM%%%250+3
  6. netsh interface ip set address name="本地连接" source=static addr=10.%a%.%b%.%c% mask=255.0.0.0
  7. :start
  8. set /A "num=%RANDOM%%%190+10"
  9. ping 10.1.1.%num% -n 1
  10. rem arp -a |find "10.1.1.%num%" &&goto start
  11. arp -a >test.log
  12. %systemroot%\system32\arp.exe -a | %systemroot%\system32\find.exe "10.1.1.%num%"
  13. echo !errorlevel!
  14. if !errorlevel! equ 0 (
  15.     goto :start
  16. )
  17. netsh interface ip set address name="本地连接" source=static addr=10.1.1.%num% mask=255.255.255.0 gateway=10.1.1.250 gwmetric=0 | find "IP地址已在网络上使用" &&goto start
  18. netsh interface ip set dns "本地连接" source=static addr=10.1.1.100 register=primary
  19. netsh interface ip add dns "本地连接" addr=8.8.8.8
  20. netsh interface ip set wins name="本地连接" source=static addr=10.1.1.100
  21. if %errorlevel% neq 0 goto start
复制代码
find命令没有找到那个IP
把win7里面test.log压缩一下传上来看看
1

评分人数

    • beck1321: 很认真 期待能够成功技术 + 1

TOP

我想问个问题

&&goto start 是去本批处理中的start

那么 我想让find以后打开 一个程序 如system32里的cmd。exe  是如何做到呢。我想做个测试
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

按照您的那个 还是不行捏 下面是运行过程
  1. C:\>c
  2. C:\>setlocal enabledelayedexpansion
  3. C:\>echo 正在为您设置IP,请稍等......
  4. 正在为您设置IP,请稍等......
  5. C:\>set /A "a=13621%250+3
  6. C:\>set /A "b=30738%250+3
  7. C:\>set /A "c=23544%250+3
  8. C:\>netsh interface ip set address name="无线网络连接" source=static addr=192.12
  9. 4.241.47 mask=255.0.0.0
  10. C:\>set /A "num=25602%1+1"
  11. C:\>ping 192.168.2.1 -n 2
  12. 正在 Ping 192.168.2.1 具有 32 字节的数据:
  13. PING: 传输失败。General failure.
  14. PING: 传输失败。General failure.
  15. 192.168.2.1 的 Ping 统计信息:
  16.     数据包: 已发送 = 2,已接收 = 0,丢失 = 2 (100% 丢失),
  17. C:\>rem arp -a |find "192.168.2.1" &&goto start
  18. C:\>C:\Windows\system32\arp.exe -a   | C:\Windows\system32\find.exe "192.168.2.1
  19. "
  20. C:\>echo !errorlevel!
  21. 1
  22. C:\>if !errorlevel! EQU 0 (goto :start )
  23. C:\>netsh interface ip set address name="无线网络连接" source=static addr=192.16
  24. 8.2.1 mask=255.255.255.0 gateway=192.168.2.250 gwmetric=0   | find "IP地址已在网
  25. 络上使用"   && goto start
  26. C:\>netsh interface ip set dns "无线网络连接" source=static addr=192.168.2.100 r
  27. egister=primary
  28. C:\>netsh interface ip add dns "无线网络连接" addr=8.8.8.8
  29. 配置的 DNS 服务器不正确或不存在。
  30. 终止批处理操作吗(Y/N)? y
  31. C:\>
复制代码
我的是win7  32位  当然 也希望能应用于64位
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

你的Win7是32位的还是64位的?

TOP

返回列表