无忧启动论坛

标题: 【20230918】获取离线系统IP地址,兼容PE&桌面系统 [打印本页]

作者: BEIKING    时间: 2023-9-15 15:22
标题: 【20230918】获取离线系统IP地址,兼容PE&桌面系统
本帖最后由 BEIKING 于 2023-9-18 19:52 编辑
  1. @echo off
  2. if /i "%UserName%" == "SYSTEM" (Goto GotAdmin) else (reg query "HKLM\SYSTEM\ControlSet001\Control\MiniNT" 1>nul 2>nul&&Goto GotAdmin)
  3. :BatchGotAdmin
  4. Set _Args=%*
  5. if `%1` neq `` Set "_Args=%_Args:"=""%"
  6. if exist %WinDir%\System32\fltMC.exe fltMC 1>nul 2>nul||mshta VBScript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c """"%~f0"" %_Args%""",,"runas",1)(Window.Close) 2>nul&&Exit /b

  7. :GotAdmin
  8. Pushd "%CD%"&cd /d "%~dp0"
  9. Title 获取目标系统 IP&Color 2f
  10. MODE 1>nul 2>nul&&MODE con: Cols=42 Lines=11

  11. :Start
  12. setlocal enabledelayedexpansion
  13. if `%1` neq `` Set Input=%1&Goto Input
  14. Set n=0&for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%i:\Windows\System32\Config\SOFTWARE" if exist "%%i:\Windows\System32\Config\SYSTEM" Set /a n+=1&Set dsk!n!=%%i
  15. if !n! equ 1 Set Input=!dsk%n%!&MODE 1>nul 2>nul&&MODE con: Cols=42 Lines=7&Goto Input
  16. if !n! geq 2 Set /a l=7+!n!*2&MODE 1>nul 2>nul&&MODE con: Cols=42 Lines=!l!
  17. Call :EchoX "e0.:选择您要查询的目标系统↓"
  18. for /l %%i in (1,1,!n!) do echo.&Call :EchoX "            " "9f::[%%i]" "  " "xx.:!dsk%%i!:\Windows"
  19. echo.&Call :EchoX "70::输入序号[" "74::默认1" "70::]"&Set n=1&Set /p n=:
  20. Set Input=!dsk%n%!&if not defined Input Set Input=!n!

  21. :Input
  22. Set Input=%Input:~0,1%
  23. if /i "%Input%:" neq "%SystemDrive%" (
  24.     for %%a in (SOFTWARE SYSTEM) do if not exist "%Input%:\Windows\System32\Config\%%a" Cls&Call :EchoX "cf.:找不到注册表文件!!"&echo "%Input%:\Windows\System32\Config\%%a"&Call :Delay 5 +&Exit
  25.     reg load HKLM\IP_SOF %Input%:\Windows\System32\Config\SOFTWARE 1>nul 2>nul
  26.     reg load HKLM\IP_SYS %Input%:\Windows\System32\Config\SYSTEM 1>nul 2>nul
  27.     Call :GetIPInfo IP_SOF IP_SYS
  28.     reg unload HKLM\IP_SOF 1>nul 2>nul
  29.     reg unload HKLM\IP_SYS 1>nul 2>nul
  30. ) else Call :GetIPInfo SOFTWARE SYSTEM
  31. if exist "%TEMP%\IPInfo.txt" (msg 1>nul 2>nul&&msg * /time 3600<"%TEMP%\IPInfo.txt"||@start "" "%TEMP%\IPInfo.txt")
  32. Call :Delay 2 +
  33. endlocal
  34. Exit

  35. :GetIPInfo
  36. Call :EchoX "e0.:正在查询中,请稍候。。。"
  37. for /f "tokens=1,2*" %%a in ('reg query "HKLM\%2\select" 2^>nul') do if /i "%%a" == "Default" Set /a x=%%c
  38. Set "v1=Microsoft\Windows NT\CurrentVersion\NetworkCards"
  39. Set "v2=ControlSet00%x%\Control\Network"
  40. Set "v3=ControlSet00%x%\services\Tcpip\Parameters"
  41. Set "s=EnableDHCP NameServer IPAddress SubnetMask DefaultGateway"
  42. Set "s=%s% DHCPNameServer DHCPIPAddress DHCPSubnetMask DHCPDefaultGateway"
  43. Set n=&for /f "delims=" %%a in ('reg query "HKLM\%1\%v1%" 2^>nul') do (
  44.     Set "v=%%a"
  45.     if "!v:%v1%\=!" neq "!v!" (
  46.         Set /a n+=1
  47.         for /f "tokens=1,2*" %%b in ('reg query "%%a" 2^>nul') do if /i "%%b" == "ServiceName" (Set "Guid!n!=%%d") else if /i "%%b" == "Description" Set "NetCard!n!=%%d"
  48.     )
  49. )
  50. if not defined n Call :EchoX "cf.:找不到网卡!!"&Call :Delay 5 +&Exit
  51. (for /f "tokens=1,2*" %%a in ('reg query "HKLM\%2\%v3%" 2^>nul') do (
  52.     if /i "%%a" == "Domain" (
  53.         if "%%c" neq "" (echo 域名名称:%%c) else echo 域名名称:
  54.     ) else if /i "%%a" == "HostName" echo 主机名称:%%c
  55. )) >"%TEMP%\IPInfo.txt"
  56. for %%a in (%s%) do Set "_%%a=1"
  57. (for /l %%a in (1 1 %n%) do (
  58.     echo.&echo 网卡名称:!NetCard%%a!
  59.     for %%b in (%s%) do Set "%%b="
  60.     Set flag=&for /f "delims=" %%b in ('reg query "HKLM\%2\%v2%" /s 2^>nul') do (
  61.         if defined flag (
  62.             for /f "tokens=1,2*" %%c in ("%%b") do if /i "%%c" == "Name" echo 连接名称:%%e& Set "flag="
  63.         ) else (
  64.             Set "v=%%b"
  65.             for %%c in ("\!Guid%%a!") do if "!v:%%~c=!" neq "!v!" Set flag=1
  66.         )
  67.     )
  68.     for /f "tokens=1,2*" %%b in ('reg query "HKLM\%2\%v3%\Interfaces\!Guid%%a!" 2^>nul') do if defined _%%b if "%%d" neq "" Set "v=%%d"&Set "%%b=!v:\0=        !"
  69.     if defined IPAddress (echo IP地址:!IPAddress!) else echo IP地址:!DHCPIPAddress!        [自动获取]
  70.     if defined SubnetMask (echo 子网掩码:!SubnetMask!) else echo 子网掩码:!DHCPSubnetMask!
  71.     if defined DefaultGateway (echo 默认网关:!DefaultGateway!) else echo 默认网关:!DHCPDefaultGateway!
  72.     if defined NameServer (Set DNS=!NameServer: =,!&Set dhcp=) else (Set DNS=!DHCPNameServer: =,!&Set dhcp=        [自动获取])
  73.     Set d=DNS 地址:&for %%i in (!DNS!) do if not defined "n%%a_%%i" echo !d!%%i!dhcp!&Set ""n%%a_%%i"=%%a"&Set dhcp=&Set d=     
  74. )) >>"%TEMP%\IPInfo.txt"
  75. Goto :eof

  76. :Delay :: 延迟操作 <%1=Sec|延迟秒数> [%2=+|显示倒计时]。
  77. if `%2` == `+` (Set n=2) else Set n=1
  78. if exist %WinDir%\System32\timeout.exe (timeout /t %1 %n%>nul) else if exist %WinDir%\System32\choice.exe (choice /t %1 /d y /n >nul) else ping 127.1 -n %1 >nul
  79. Goto :eof

  80. :EchoX :: 显示彩色文字 (不支持半角字符 \ / : * ? " < >|. % ! ~)。
  81. setlocal enabledelayedexpansion
  82. Set echox=EchoX.exe&&!echox! 1>nul 2>nul||(Set echox=&mkdir "%TEMP%\EchoX" 2>nul)
  83. for %%a in (%*) do (
  84.     Set "param=%%a"&Set "param=!param:"=!"
  85.     Set "color=!param:~0,2!"&(if not exist %WinDir%\System32\findstr.exe if not defined echox Set "color=xx")
  86.     Set n=0&(if "!param:~2,2!" == "::" Set n=1)&(if "!param:~2,2!" == ".:" Set n=2)
  87.     if !n! gtr 0 (
  88.         if /i "!color!" == "xx" (Set /p="_!param:~4!"<nul) else (Set param=%%~nxa&if defined echox (!echox! -c !color! -n "!param:~4!") else (Pushd "%TEMP%\EchoX" 2>nul&>"!param:~4!",Set /p= <nul&findstr /a:!color! .* "!param:~4!*"&del "!param:~4!"&Popd))
  89.         if !n! == 2 echo.
  90.     ) else if defined param Set /p="_!param!"<nul
  91. )
  92. endlocal
  93. Goto :eof
复制代码




批处理脚本用途
获取(离线和在线)Win系统主机:域名名称、主机名称、网卡信息(连接名称、IP地址、子网掩码、默认网关、DNS地址)

读取离线注册表IP信息方法非原创,借鉴的是无忧某位坛友分享的。
允许传参调用:   
    获取目标系统IP.bat C
    获取目标系统IP.bat D

【20230916】
1)释放临时文件到%TEMP%目录,避免因当前目录无写权限而报错。
2)格式化DNS地址输出并去重。

【20230918】
1)优化多系统选择体验,单一系统自动打开查询,多系统提供列表选择
2)支持网卡多IP设置查询

链接: https://pan.baidu.com/s/1tVJv4NWAY9bkzIy6VSHX_w 提取码: sad4




作者: scq330    时间: 2023-9-15 15:39
代码里面有特殊字符。。。
作者: liuyanjun    时间: 2023-9-15 15:57
感谢分享 一次成功
作者: wszjf    时间: 2023-9-15 16:24
这是个好东西,WIN10系统测试成功,PE系统提取不到
作者: BEIKING    时间: 2023-9-15 16:46
wszjf 发表于 2023-9-15 16:24
这是个好东西,WIN10系统测试成功,PE系统提取不到

这个应该可以吧,,你离线系统盘符输对了,就应该能取到

作者: wszjf    时间: 2023-9-15 17:01
本帖最后由 wszjf 于 2023-9-15 17:05 编辑
BEIKING 发表于 2023-9-15 16:46
这个应该可以吧,,你离线系统盘符输对了,就应该能取到

盘符是对的,也换过所有可能的盘符,微PE2.3

提示:找不到文件C:\IPInfo.txt


作者: BEIKING    时间: 2023-9-15 17:14
wszjf 发表于 2023-9-15 17:01
盘符是对的,也换过所有可能的盘符,微PE2.3

提示:找不到文件C:\IPInfo.txt

晚上,我整理下发给你

作者: attirber    时间: 2023-9-15 17:19
感谢分享
作者: holley2008    时间: 2023-9-15 17:52
BUG反馈:多个dns的 会有,或空格隔开,,单网卡多个IP的 会全部连在一起。
作者: 车厘子    时间: 2023-9-15 17:57
感谢大佬分享,学习了
作者: yyz2191958    时间: 2023-9-15 18:06
支持支持
作者: 2012andyle113    时间: 2023-9-15 18:41
不错不错,还是比较有用的
作者: wmjm    时间: 2023-9-15 19:16
测试一下,谢谢分享
作者: nathan6498    时间: 2023-9-15 19:26
谢谢分享
作者: yc2428    时间: 2023-9-15 19:49
谢谢分享
作者: fyq    时间: 2023-9-15 20:44
测试一下,谢谢分享
作者: 2010sya    时间: 2023-9-15 20:53
本帖最后由 2010sya 于 2023-9-15 20:59 编辑

http://bbs.wuyou.net/forum.php?m ... 0401&fromuid=373191
获取离线系统ip还是比较实用的!~!
在某些比较特殊的环境,比如ip-mac绑定,一旦系统崩溃又不知道ip的情况下,这就是个大问题!
我的想法是,怎么能够在这种情况下,获取ip并自动配置到pe系统下???

作者: in9    时间: 2023-9-16 00:06
谢谢分享!
作者: BEIKING    时间: 2023-9-16 00:28
holley2008 发表于 2023-9-15 17:52
BUG反馈:多个dns的 会有,或空格隔开,,单网卡多个IP的 会全部连在一起。

这注册表中存储的值就是这样,,批处理我看下能不能去重和优化下
作者: KIM3298    时间: 2023-9-16 05:15
谢谢分享
作者: wszjf    时间: 2023-9-16 09:48
BEIKING 发表于 2023-9-15 17:14
晚上,我整理下发给你

好的,谢谢
作者: yaojil    时间: 2023-9-16 11:06
感谢分享
作者: sulong    时间: 2023-9-16 11:39
很有用,遇到系统崩溃了,只知道用其它不知不管的,不用再去翻离线注册表了
谢谢楼主分享
作者: BEIKING    时间: 2023-9-16 15:39
BEIKING 发表于 2023-9-16 00:28
这注册表中存储的值就是这样,,批处理我看下能不能去重和优化下

已处理

作者: BEIKING    时间: 2023-9-16 15:40
holley2008 发表于 2023-9-15 17:52
BUG反馈:多个dns的 会有,或空格隔开,,单网卡多个IP的 会全部连在一起。

已处理‘

作者: BEIKING    时间: 2023-9-16 15:40
wszjf 发表于 2023-9-15 17:01
盘符是对的,也换过所有可能的盘符,微PE2.3

提示:找不到文件C:\IPInfo.txt

测下最新的,代码更新到主贴了。
作者: Fastwingo    时间: 2023-9-16 17:03
感谢分享
作者: wszjf    时间: 2023-9-16 21:45
BEIKING 发表于 2023-9-16 15:40
测下最新的,代码更新到主贴了。

非常感谢您的耐心回复,新的代码在PE系统还是提示找不到IPInfo.txt文件,经研究已经找到问题原因:

问题出在 :Start 标签下的这2行代码,第一行预测了可能出现的情况,默认使用msg 命令在新消息框显示IPInfo.txt的内容,如果 msg 命令执行失败,则使用默认关联的程序(记事本)打开IPInfo.txt文件,在我的PE系统下就出现了使用记事本打开文件IPInfo.txt的情况,但是在执行打开IPInfo.txt前已经执行完第二行删除IPInfo.txt的命令,所以就出现了提示找不到IPInfo.txt文件的问题。

我尝试把第2行代码删除或注释掉,在PE系统下测试成功了。

msg 1>nul 2>nul&&msg * /time 3600<"%TEMP%\IPInfo.txt"||@start "" "%TEMP%\IPInfo.txt"
Call :Delay 2&del /q "%TEMP%\IPInfo.txt" 1>nul 2>nul

作者: BEIKING    时间: 2023-9-16 21:57
wszjf 发表于 2023-9-16 21:45
非常感谢您的耐心回复,新的代码在PE系统还是提示找不到IPInfo.txt文件,经研究已经找到问题原因:

问 ...

我明白了,我中间还延迟了2秒,才删临时文件。
没想到你的PE,2秒时间还没打开记事本
作者: 创新科技2015    时间: 2023-9-16 22:13

感谢分享
作者: wszjf    时间: 2023-9-16 22:45
BEIKING 发表于 2023-9-16 21:57
我明白了,我中间还延迟了2秒,才删临时文件。
没想到你的PE,2秒时间还没打开记事本

嗯嗯,能提一个修改建议吗?就是再提高一下自动化程度,能不能先遍历C D E F G H I J K X盘符查找文件,找不到再手动输入盘符
作者: BEIKING    时间: 2023-9-16 23:06
wszjf 发表于 2023-9-16 22:45
嗯嗯,能提一个修改建议吗?就是再提高一下自动化程度,能不能先遍历C D E F G H I J K X盘符查找文件, ...

要有多系统盘符时怎么处理?
只取最后找到的,还是最先找到的

作者: wszjf    时间: 2023-9-16 23:21
BEIKING 发表于 2023-9-16 23:06
要有多系统盘符时怎么处理?
只取最后找到的,还是最先找到的

这确实是个问题
作者: wszjf    时间: 2023-9-17 01:04
BEIKING 发表于 2023-9-16 21:57
我明白了,我中间还延迟了2秒,才删临时文件。
没想到你的PE,2秒时间还没打开记事本

研究了一晚上,没找到PE系统下,删除IPInfo.txt文件的最佳时机,最后才找到原因,PE系统下3种延时方法都无效,每次执行的都是立即删除,所以打开时就找不到文件了。

使用 消息框 还是 记事本 显示IP地址信息的代码做了改进,先判断一下msg.exe是否存在就可以了:
if exist %WinDir%\System32\msg.exe (msg 1>nul 2>nul&&msg * /time 3600<"%TEMP%\IPInfo.txt") else (start "" "%TEMP%\IPInfo.txt")
作者: wszjf    时间: 2023-9-17 01:57
BEIKING 发表于 2023-9-16 23:06
要有多系统盘符时怎么处理?
只取最后找到的,还是最先找到的

想到一个解决方案,遍历所有盘符,如果有多个,列出并让用户输入要查询的盘符,如果只有一个则直接打开
作者: tymfl    时间: 2023-9-17 07:53
谢谢分享
作者: pda8888    时间: 2023-9-17 08:47
好像是在非管理员模式下也可以获取管理员权限而且不丢失命令行参数?这个就牛逼
作者: wszjf    时间: 2023-9-17 17:53
wszjf 发表于 2023-9-17 01:57
想到一个解决方案,遍历所有盘符,如果有多个,列出并让用户输入要查询的盘符,如果只有一个则直接打开

遍历代码写好了,整合一下就可以了
  1. @echo off
  2. echo 正在查找使用过网卡的系统盘符...

  3. set "found=0"
  4. set "driveCount=0"
  5. set "firstDrive="
  6. for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  7.     ::echo 正在搜索盘符 %%d...
  8.     dir /s /b "%%d:\Program Files (x86)\Inno Setup 5\ISCrypt.dll" > nul 2>&1
  9.     if not errorlevel 1 (
  10.         set /a "driveCount+=1"
  11.         echo 已找到盘符 %%d
  12.         set "found=1"
  13.         if not defined firstDrive (
  14.             set "firstDrive=%%d"
  15.         )
  16.     )
  17. )

  18. if %found%==0 (
  19.     echo 未找到使用过网卡的系统盘符!
  20.     pause
  21. ) else if %driveCount%==1 (
  22.     goto :one
  23. ) else (
  24.     goto :two
  25. )

  26. :one
  27. echo 找到1个盘符 %firstDrive%,现在开始查询...
  28. pause
  29. exit

  30. :two
  31. echo 找到多个盘符,请输入要查询的盘符,默认为第1个盘符 %firstDrive%
  32. pause
  33. exit
复制代码



作者: holley2008    时间: 2023-9-18 12:03
BEIKING 发表于 2023-9-16 15:40
已处理‘

我获取的结果是这样?


作者: BEIKING    时间: 2023-9-18 13:36
holley2008 发表于 2023-9-18 12:03
我获取的结果是这样?

你是什么系统环境,PE还是正常系统。
系统版本说下,还有你是记事本打开显示,还是窗口显示
作者: holley2008    时间: 2023-9-18 14:15
BEIKING 发表于 2023-9-18 13:36
你是什么系统环境,PE还是正常系统。
系统版本说下,还有你是记事本打开显示,还是窗口显示

我直接在服务器桌面运行的脚本,见图:

作者: 2939788244    时间: 2023-9-18 14:23
谢谢分享
作者: BEIKING    时间: 2023-9-18 16:29
holley2008 发表于 2023-9-18 14:15
我直接在服务器桌面运行的脚本,见图:

明白了,,我等会儿会更新。
作者: BEIKING    时间: 2023-9-18 17:14
holley2008 发表于 2023-9-18 14:15
我直接在服务器桌面运行的脚本,见图:

【20230918】
1)优化多系统选择体验,单一系统自动打开查询,多系统提供列表选择
2)支持网卡多IP设置查询
作者: yingmeng    时间: 2023-9-19 21:55
感谢分享
作者: 呵呵#1861    时间: 2023-9-19 22:09
谢谢分享
作者: promrhxq    时间: 2023-9-19 22:11
感谢分享好东东
作者: 2010zihan    时间: 2023-9-19 22:14
收藏备用!
作者: sun4008    时间: 2023-9-20 08:15
感谢楼主,很好用!
作者: hi9808    时间: 2023-9-20 22:24
感谢分享~~很不错的工具收藏了
作者: yzicee    时间: 2023-9-20 22:35
离线获取IP经常要用到,谢谢分享
作者: x1aox1n    时间: 2023-9-20 23:42
感谢分享,谢谢了
作者: casttt    时间: 2023-9-21 08:23
感谢分享,有忘记时的后备
作者: 666666    时间: 2023-9-21 08:43
这个批处理好用啊,找IP省事多了。
作者: 方长    时间: 2023-9-21 09:13
看起来很不错哦,收藏之~~~
谢谢LZ啦!!!
作者: xtjuf    时间: 2023-9-21 09:43
这个还是很有用的,感谢分享
作者: zguest    时间: 2023-9-23 15:22
收藏,很实用的工具
作者: 蛮牛士    时间: 2023-9-26 16:03
6666666
作者: 无犹启动    时间: 2023-10-12 13:50
谢谢分享
作者: kuding    时间: 2023-10-22 13:58
本帖最后由 kuding 于 2023-10-22 13:59 编辑

这个好强大。。。建议加版本号或更新时间
作者: xcj138    时间: 2023-10-22 14:09

谢谢分享
作者: 你好一起玩    时间: 2023-12-9 12:09
这个绝对好的,收藏了.做维护很有用
作者: ljmmjl    时间: 2023-12-9 12:49
谢谢分享
作者: Anson4    时间: 2024-1-25 21:54
感谢分享!
作者: hehuiying    时间: 2024-4-19 14:30
谢谢分享
作者: lxptyc    时间: 2024-4-19 14:59
这是个好东西
作者: wn168cn@163.com    时间: 2024-10-24 10:14
感谢楼主分享
作者: 2012yjkiw    时间: 2024-11-2 17:29
大佬脚本不错,能不能出个不输出弹出对话框的,而是输出到D:\IpSet.bat;并且这个批处理可以直接运行即可设置IP?万谢!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3