Board logo

标题: [文本处理] 获取IP的批处理,WIN7不用能,XP却可以。 [打印本页]

作者: gxxk    时间: 2015-1-3 17:08     标题: 获取IP的批处理,WIN7不用能,XP却可以。

怎么把下面的代码改为WIN7能用?现在只有XP下可以用。WIN7不行,好像是变量不对?谁能帮我改下?
  1. @echo off
  2. Rem ===========扩展本地环境变量延迟===================
  3. setlocal enabledelayedexpansion
  4. title 获取本机IP及做好映射盘 Powered by xfp
  5. Rem '/*=========初始化设置=============*/
  6. set "Space=        "
  7. set "IP_addr=%Space%IP Address. . . . . . . . . . . . " %'/*------IP地址格式,注意引号前的空格!*/%
  8. Rem ===========取IPconfig中的IP信息===================
  9. Rem ==如果有多个IP或网卡,本程序只取第一个,因为取得第一个IP后,变量IP_addr已经被修改==
  10. for /f " skip=13 tokens=1,2 delims=:" %%i  in ('ipconfig /all') do (
  11.     for %%a in ( IP_addr) do (
  12.       if "%%i"=="!%%a!" (
  13.       set %%a=%%j
  14.       goto ok
  15. )
  16.    )   
  17. )
  18. :ok
  19. Rem '/*===========结果输出===============*/
  20. echo 你的IP地址为:%IP_addr%
  21. Rem ======获取IP地址中第三、四位作为变量映射,如IP 192.168.1.100即得到1和100,第三位需多个不同网段才用到,先写下来吧===
  22. set "Room="
  23. set "ID="
  24. for /f "tokens=3,4 delims=." %%i in ("%IP_addr%") do (
  25. set "Room=%%i"
  26. set "ID=%%j"
  27. echo 网段号是:!Room!
  28. echo 当前IP号是:!ID!
  29. )
复制代码

作者: tmplinshi    时间: 2015-1-3 17:45

本帖最后由 tmplinshi 于 2015-1-3 19:37 编辑

是因为 WIN7 里面的 ipconfig /all 命令输出的结果与 XP 不一样。
你贴的代码是判断有没有“        IP Address. . . . . . . . . . . . ”,你可以自己看一下 ipconfig /all 的输出结果,然后进行修改。
下面的代码 WIN7 测试有效(应该也适用XP):
  1. @echo off
  2. Rem ===========扩展本地环境变量延迟===================
  3. setlocal enabledelayedexpansion
  4. title 获取本机IP及做好映射盘 Powered by xfp
  5. Rem '/*=========初始化设置=============*/
  6. set IP_addr="   IPv4 Address. . . . . . . . . . . " "        IP Address. . . . . . . . . . . . "
  7. chcp 437 >nul
  8. Rem ===========取IPconfig中的IP信息===================
  9. Rem ==如果有多个IP或网卡,本程序只取第一个,因为取得第一个IP后,变量IP_addr已经被修改==
  10. for /f " skip=13 tokens=1,2 delims=:" %%i  in ('ipconfig /all') do (
  11.      for %%a in (%IP_addr%) do (
  12.        if "%%i"=="%%~a" (
  13.        set IP_addr=%%j
  14.        goto ok
  15.          )
  16.     )   
  17. )
  18. :ok
  19. Rem '/*===========结果输出===============*/
  20. GRAFTABL 936 >nul
  21. for /f "delims=(" %%a in ("%IP_addr%") do set IP_addr=%%a
  22. echo 你的IP地址为:%IP_addr%
  23. Rem ======获取IP地址中第三、四位作为变量映射,如IP 192.168.1.100即得到1和100,第三位需多个不同网段才用到,先写下来吧===
  24. set "Room="
  25. set "ID="
  26. for /f "tokens=3,4 delims=." %%i in ("%IP_addr%") do (
  27. set "Room=%%i"
  28. set "ID=%%j"
  29. echo 网段号是:!Room!
  30. echo 当前IP号是:!ID!
  31. )
  32. pause
复制代码

作者: tmplinshi    时间: 2015-1-3 18:42

本帖最后由 tmplinshi 于 2015-1-3 19:18 编辑

这样写简单一点:
  1. @echo off
  2. call :GetIPAddress ip 网段号 IP号
  3. echo %ip% --- %网段号% --- %IP号%
  4. pause & exit
  5. :GetIPAddress [IP地址] [网段号] [IP号]
  6.     for /f "delims=:( tokens=2" %%i in (
  7.         ' ipconfig /all ^| findstr /rc:"IP[v4]* Address" /rc:"IP[v4]* 地址" '
  8.     ) do (
  9.         for /f "tokens=1-4 delims=. " %%a in ("%%i") do (
  10.             set "%~1=%%a.%%b.%%c.%%d"
  11.             set "%~2=%%c"
  12.             set "%~3=%%d"
  13.         ) 2>nul
  14.         goto :eof
  15.     )
  16. goto :eof
复制代码

作者: yu2n    时间: 2015-1-4 11:04

获取单个网卡的IP V4地址 By Yu2n
测试 Win7x64, XPSP3x86 下可用 ...
  1. @echo off
  2. for /f tokens^=1^,2^ delims^=^"^" %%a in ('wmic nicconfig get IPAddress /value ^| findstr /i "IPAddress=[^]"') do (set "ip=%%b")
  3. echo, ^^_^^ IPAddress^: %ip%
  4. pause
复制代码
结果如下:
  1. ^_^ IPAddress: 192.168.56.1
  2. 请按任意键继续. . .
复制代码

作者: yu2n    时间: 2015-1-4 11:17

获取所有网卡的所有IP:
  1. wmic nicconfig get IPAddress /value | findstr /i "IPAddress=[^]"
复制代码
结果如下:
  1. IPAddress={"192.168.199.200","fe80::fdb3:41a6:e649:2f06"}
  2. IPAddress={"192.168.56.1","fe80::8daa:6931:5ddf:90bd"}
复制代码





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