liuzhaoyzz 发表于 2020-1-16 14:11:31

分享个获取有线网卡本地连接内网IP、子网掩码、网关的批处理

本帖最后由 liuzhaoyzz 于 2022-10-9 10:48 编辑

两个方案保底,一个不行自动用另一个,如果系统中精简了findstr命令,尝试用find命令。未测试一个网卡绑定多个ip的情况。

edit:已更换为plusv方案,感谢分享 获取 内网 IP、子网掩码、网关的 EXE 文件 - 脚本讨论区 - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=viewthread&tid=418506

@echo off & setlocal enabledelayedexpansion
rem 获取ip、网关、子网掩码:
rem 如果系统中有route命令,优先采用方案1:
for /f "tokens=3,4" %%a in ('route print^|findstr /RC:"0.0.0.0          0.0.0.0.*0$"') do (if not defined ip set "Gateway=%%a" & set "ip=%%b")
for /f "tokens=3,4" %%a in ('route print^|find "0.0.0.0          0.0.0.0"^|find " 10"') do (if not defined ip set "Gateway=%%a" & set "ip=%%b")
for /f "tokens=3,4" %%a in ('route print^|find "0.0.0.0          0.0.0.0"^|find " 20"') do (if not defined ip set "Gateway=%%a" & set "ip=%%b")
for /f "tokens=2" %%a in ('route print^|findstr "在链路上.*%ip%"') do (if not defined mask set "mask=%%a" )
for /f "tokens=2" %%a in ('route print^|find "在链路上    %ip%"') do (if not defined mask set "mask=%%a" )

rem 如果系统中没有route命令,就采用方案2:
if defined ip goto :next
for /f "delims=[]" %%a in ('ipconfig^|find /n "以太网:"') doif not defined n1 set /a n1=%%a+3
for /f "delims=[]" %%a in ('ipconfig^|find /n "本地连接:"') doif not defined n1 set /a n1=%%a+3
set /a n2=%n1%+1
set /a n3=%n1%+2
for /f "skip=%n1%tokens=2 delims=:" %%a in ('ipconfig') doif not defined ip set ip=%%a
for /f "skip=%n2%tokens=2 delims=:" %%a in ('ipconfig') doif not defined mask set mask=%%a
for /f "skip=%n3%tokens=2 delims=:" %%a in ('ipconfig') doif not defined Gateway set Gateway=%%a
set ip=%ip: =%
set mask=%mask: =%
set Gateway=%Gateway: =%

:next
echo IP地址是:%ip%
rem for /f "tokens=1,2,3 delims=." %%a in ("%ip%") do(if not defined IP_Pool set IP_Pool=%%a.%%b.%%c.2)
rem echo IP起始地址是:%IP_Pool%
echo 子网掩码是:%mask%
echo 网关是:%Gateway%
pause
exit /b



hero158 发表于 2020-1-16 14:24:10

还不错。。。。。。。。。。。

邪恶海盗 发表于 2020-1-16 14:35:57

ipconfig命令不行么?

nttwqz 发表于 2020-1-16 14:43:23

不含DNS?

liuzhaoyzz 发表于 2020-1-16 15:04:57

本帖最后由 liuzhaoyzz 于 2020-1-16 15:35 编辑

邪恶海盗 发表于 2020-1-16 14:35
ipconfig命令不行么?
ipconfig命令,不同的系统关键词不同啊,比如有的叫做本地连接,有的可能被改名字了,route方案用的关键字有个“在链路上”,比“本地连接”改名字的稍微好点。“本地连接”不同的系统,名字不同,WIN7叫做“本地连接:”,WIN10似乎叫做“以太网:”,有点乱。

liuzhaoyzz 发表于 2020-1-16 15:05:31

nttwqz 发表于 2020-1-16 14:43
不含DNS?

我没想着获取dns,你写的批处理有吗?

2010sya 发表于 2020-1-16 15:30:12

不错,挺好用的,能否自动导出为txt文件?

liuzhaoyzz 发表于 2020-1-16 15:33:12

本帖最后由 liuzhaoyzz 于 2020-1-16 15:36 编辑

2010sya 发表于 2020-1-16 15:30
不错,挺好用的,能否自动导出为txt文件?
可以啊。添加几句:
echo IP地址是:%ip%>ip.txt
echo 子网掩码是:%mask%>>ip.txt
echo 网关是:%Gateway%>>ip.txt

nttwqz 发表于 2020-1-16 15:34:44

liuzhaoyzz 发表于 2020-1-16 15:04
ipconfig命令,不同的系统关键词不同啊,比如有的叫做本地连接,有的可能被改名字了,route方案用的关键 ...

反了~

2010sya 发表于 2020-1-16 15:40:26

liuzhaoyzz 发表于 2020-1-16 15:33
可以啊。添加几句:
echo IP地址是:%ip%>ip.txt
echo 子网掩码是:%mask%>>ip.txt


好的,谢谢!

2012andyle113 发表于 2020-1-16 16:18:19

我都是ipconfig

窄口牛 发表于 2020-1-16 16:50:56

早先发过,最后定稿为获取外网IP,然后获取路由通路,选择第一个网关,然后在ipconfig里数行数获取IP及其余的参数。

liuzhaoyzz 发表于 2020-1-16 16:53:31

窄口牛 发表于 2020-1-16 16:50
早先发过,最后定稿为获取外网IP,然后获取路由通路,选择第一个网关,然后在ipconfig里数行数获取IP及其余 ...

地址是什么?我看看

窄口牛 发表于 2020-1-16 17:00:25


你试试给精简一下,去掉第三方wget的依赖。

liuzhaoyzz 发表于 2020-1-16 17:39:33

你那个就挺好啊。我主要是想获取内网ip 掩码 网关,用于设置pxe启动的参数用的。没考虑外网和dns,计算机名字什么的。

yigeren 发表于 2020-1-16 19:28:35

这个脚本在PE系统中使用,不能获取目标系统(C盘)的本地连接信息吧

邪恶海盗 发表于 2020-1-16 20:08:09

liuzhaoyzz 发表于 2020-1-16 15:04
ipconfig命令,不同的系统关键词不同啊,比如有的叫做本地连接,有的可能被改名字了,route方案用的关键 ...

那个无所谓吧,我们要的主要是值,前面显示友好度差点也没关系

saiz 发表于 2020-1-16 20:40:50

用這個比較好...
http://wuyou.net/forum.php?mod=viewthread&tid=335152
直接抓登錄檔記錄
就算硬碟壞了 用PE也可以抓到資料

saiz 发表于 2020-1-16 20:41:19

用這個比較好...
http://wuyou.net/forum.php?mod=viewthread&tid=335152
直接抓登錄檔記錄
就算硬碟壞了 用PE也可以抓到資料

liuzhaoyzz 发表于 2020-1-16 21:45:45

yigeren 发表于 2020-1-16 19:28
这个脚本在PE系统中使用,不能获取目标系统(C盘)的本地连接信息吧

不能获取另一个系统的,只能获取当前系统(可能是windows/pe)的

liuzhaoyzz 发表于 2020-1-16 21:48:05

saiz 发表于 2020-1-16 20:40
用這個比較好...
http://wuyou.net/forum.php?mod=viewthread&tid=335152
直接抓登錄檔記錄


我要的是抓取当前系统下的ip 掩码啊,用来配置pxe的

liuzhaoyzz 发表于 2020-1-16 21:49:05

邪恶海盗 发表于 2020-1-16 20:08
那个无所谓吧,我们要的主要是值,前面显示友好度差点也没关系

关键字不对的话,抓取的值不对撒

lianmeng 发表于 2020-1-16 22:27:10

不错,很好,谢谢!

nttwqz 发表于 2020-1-16 23:13:07

liuzhaoyzz 发表于 2020-1-16 21:45
不能获取另一个系统的,只能获取当前系统(可能是windows/pe)的

记得本坛有个现成的工具,GUI界面的

slore 发表于 2020-1-16 23:57:08

setlocal enabledelayedexpansion
既然启用延缓环境变量,为什么不用?直接一次ipconfig处理完,而不是调用5次。


ipconfig命令,不同的系统关键词不同啊,比如有的叫做本地连接,有的可能被改名字了,route方案用的关键字有个“在链路上”,比“本地连接”改名字的稍微好点。“本地连接”不同的系统,名字不同,WIN7叫做“本地连接:”,WIN10似乎叫做“以太网:”,有点乱。

chcp 437
ipconfig

chcp 936
echo 获取IP:

liuzhaoyzz 发表于 2020-1-17 08:08:45

nttwqz 发表于 2020-1-16 23:13
记得本坛有个现成的工具,GUI界面的

因为我使用的场景是批处理调用,取ip、掩码写配置文件用的,GUI版本能够输出结果吗?

liuzhaoyzz 发表于 2020-1-17 08:16:02

本帖最后由 liuzhaoyzz 于 2020-1-17 08:35 编辑

slore 发表于 2020-1-16 23:57
既然启用延缓环境变量,为什么不用?直接一次ipconfig处理完,而不是调用5次。
setlocal enabledelayedexpansion是习惯性加上去的。

chcp 437切换到英文显示,似乎有乱码啊?如果用Ethernet adapter作为关键字,似乎有很多结果,处理起来麻烦,不知道倒底哪个是需要的。


一次处理完似乎挺好的,的确有优化改进的空间,但我不知道具体怎么处理。

哦,发现个问题,似乎route print查询路由表,如果同时存在有线网卡和无线网卡都有ip的情况下,获取的值可能是对的,也可能不对,批处理要修改下才行。。。

liuzhaoyzz 发表于 2020-1-17 08:40:11

liuzhaoyzz 发表于 2020-1-17 08:16
setlocal enabledelayedexpansion是习惯性加上去的。

chcp 437切换到英文显示,似乎有乱码啊?如果用E ...
chcp 65001,不能显示网卡类型,我要提取的是有线网卡,看不出来

chcp936则可以显示网卡类型,显示有线网卡,无线网卡。


slore 发表于 2020-1-17 11:07:31

setlocal enabledelayedexpansion

利用好这个吧。批处理精华的就for和这个吧。
这2个掌握了,批处理代码结构,处理会很整洁直观。

liuzhaoyzz 发表于 2020-1-17 11:17:03

是的,我比较懒散,不追求代码质量,能搞出来,对我来说就不错了。。。
页: [1] 2
查看完整版本: 分享个获取有线网卡本地连接内网IP、子网掩码、网关的批处理