自动设置网络.bat

 

:: ==============================
:: code by fireghost57
:: modify: 2013.08.30
:: ==============================
@echo off
title 自动设置网络
setlocal enabledelayedexpansion					%/*开启此项后可在截取字符串时保存截取内容*/%
netsh wlan set hostednetwork mode=disallow		%/*承载网络模式不禁止的话不可使用(默认都没有承载模式)*/%
cls

:START
Rem =========== 生成配置 ===========
set "ipconfig_dir=ipconfig.ini"
if not exist %ipconfig_dir% (
	echo [查找主机]>						%ipconfig_dir%
	echo IP_find=>>					%ipconfig_dir%
	echo MAC_find=>>					%ipconfig_dir%
	echo [修改参数]>>					%ipconfig_dir%
	echo HOSTNAME_set=>>				%ipconfig_dir%
	echo IP_set=>>					%ipconfig_dir%
	echo MAC_set=>>					%ipconfig_dir%
	echo MASK_set=>>					%ipconfig_dir%
	echo GATEWAY_set=>>				%ipconfig_dir%
	echo DNS1_set=>>					%ipconfig_dir%
	echo DNS2_set=>>					%ipconfig_dir%
)

:LISTEN
	set isChinese=false
	set f_Hostname=Name
	set f_Adapter=Ethernet adapter
	set /a f_Adapter_tokens=2
	set f_Desc=Description
	set f_IP=IP Address
	set f_MAC=Physical Address
	:: 查找主机名
	set /a line=0
	for /f "tokens=2* delims=:" %%i in ('ipconfig/all^|findstr /c:"%f_Hostname%"') do (
		set /a line+=1
		set "Name_host=%%i"
	)
	:: 语言选择
	if %line% EQU 0 (
		goto LISTCN
	)
goto OS_VER

:LISTCN
	set isChinese=true
	set f_Hostname=主机名
	set f_Adapter=适配器
	set /a f_Adapter_tokens=1
	set f_Desc=描述
	set f_IP=IPv4 地址
	set f_MAC=物理地址
	:: 查找主机名
	set /a line=0
	for /f "tokens=2* delims=:" %%i in ('ipconfig/all^|findstr /c:"%f_Hostname%"') do (
		set /a line+=1
		set "Name_host=%%i"
	)
	:: 语言选择
	if %line% EQU 0 (
		goto LISTERR
	)
goto OS_VER

:LISTERR
	echo 本程序暂不支持此系统,程序自动退出
	pause>nul
goto END

:OS_VER
	ver | find "5.0." > nul && goto show50
	ver | find "5.1." > nul && goto show51
	ver | find "5.2." > nul && goto show52
	ver | find "6.0." > nul && goto show60
	ver | find "6.1." > nul && goto show61
goto GETINFO

:show50
	@echo ----------------------------------------
	@echo 当前系统是:[ Windows2000 ]
	@echo ----------------------------------------
goto GETINFO

:show51
	@echo ----------------------------------------
	@echo 当前系统是:[ WindowsXP ]
	@echo ----------------------------------------
goto GETINFO

:show52
	@echo ----------------------------------------
	@echo 当前系统是:[ Windows2003 ]
	@echo ----------------------------------------
goto GETINFO

:show60
	@echo ----------------------------------------
	@echo 当前系统是:[ WindowsVista ]
	@echo ----------------------------------------
goto GETINFO

:show61
	@echo ----------------------------------------
	@echo 当前系统是:[ Windows7 ]
	@echo ----------------------------------------
goto GETINFO

:GETINFO
	:: 查找连接名称
	set /a line=0
	for /f "tokens=1 delims=:" %%i in ('ipconfig/all^|findstr /c:"%f_Adapter%"') do (
		:: 过滤无效记录
		set srcStr=%%i
		set tgtStr=%f_Desc%
		:: 判断是否包含字符串,逻辑与命令若为真,不再继续执行后面语句,否则继续执行逻辑或后半部
		echo !srcStr!|findstr !tgtStr!>nul && set isExist=true || set isExist=false
		if !isExist! == false (
			:: 过滤连接名称,取第一部分为%%a,剩余部分为%%b
			for /f "tokens=%f_Adapter_tokens%,* delims= " %%a in ("!srcStr!") do (
				set /a line+=1
				set "Lan_!line!=%%b"
			)
		)
	)
	:: 过滤字符串
	set Name_host=%Name_host: =%
	:: 输出信息
	ipconfig /all>["%Name_host%"].cfg
:GETDESC
	:: 获取网卡信息
	set /a line=0
	for /f "tokens=1,3 delims=:" %%i in ('findstr /n /c:"%f_Desc%" [%Name_host%].cfg') do (
		set /a line+=1
		set Sech_!line!=%%i
		set Desc_!line!=%%j
		echo !line!.%%j
	)
	echo 发现%line%条网卡信息.
	:: 网卡序号选择
	if %line% == 1 (
		set /a num=1
	) else (
		set /p num=请输入要处理的网卡序号:
	)
	set /a next_num=num+1
	if %num% LEQ 0 (
		:: 小于最小值
		goto INPUTERR
	) else (
		:: 大于最大值
		if %num% GTR %line% (
			goto INPUTERR
		)
	)
	:: 设置网络连接名称
	set Lan_Name=!Lan_%num%!
goto GETNETINFO

:INPUTERR
	echo 输入错误,请重新输入.
	pause>nul
	cls
goto GETDESC

:: 获取网络信息
:GETNETINFO
	:: 查找IP信息
	set "IP_host= "
	for /f "tokens=1,3 delims=:" %%i in ('findstr /n /c:"%f_IP%" [%Name_host%].cfg') do (
		if !num! neq !line! (
			:: 不是最大值
			if !Sech_%num%! leq %%i (
				if %%i leq !Sech_%next_num%! (
					set IP_host=%%j
				)
			)
		) else (
			:: 是最大值
			if !Sech_%num%! leq %%i (
				set IP_host=%%j
			)
		)
	)
	:: 查找MAC信息
	set "MAC_host= "
	for /f "tokens=1,3 delims=:" %%i in ('findstr /n /c:"%f_MAC%" [%Name_host%].cfg') do (
		if !num! neq !line! (
			:: 不是最大值
			if !Sech_%num%! leq %%i (
				if %%i leq !Sech_%next_num%! (
					set MAC_host=%%j
				)
			)
		) else (
			:: 是最大值
			if !Sech_%num%! leq %%i (
				set MAC_host=%%j
			)
		)
	)
	
	:: 网卡序号初始化
	set /a CrdNum=1
	:: 转存网卡描述
	set Desc=!Desc_%num%!
goto FNDA

:: 在注册表中查找 10位以内 %Desc% 网卡注册信息
:FNDA
	for /f "tokens=2*" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum% /v DriverDesc') do (
		set DrvDesc=%%j
	)
	if "%Desc%" EQU " %DrvDesc%" goto SETNETINFO
	
	set /a CrdNum=CrdNum+1
	if %CrdNum% GEQ 10 goto FNDB
goto FNDA

:: 在注册表中查找 大于10位 %Desc% 网卡注册信息
:FNDB
	for /f "tokens=2*" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum% /v DriverDesc') do (
		set DrvDesc=%%j
	)
	if "%Desc%" EQU " %DrvDesc%" goto SETNETINFO
	
	set /a CrdNum=CrdNum+1
	if %CrdNum% GEQ 40 goto FNDERR
goto FNDB

:: 未找到网卡信息
:FNDERR
	cls
	@echo        输入错误,请重新输入.
	pause
goto LISTEN

Rem =========== 根据设定配置网络参数 ===========
:SETNETINFO
	:: 过滤字符串
	set Name_host=%Name_host: =%
	set Desc=%Desc:~1%
	set IP_host=%IP_host: =%
	set MAC_host=%MAC_host: =%
	if %isChinese% == true (
		set IP_host=%IP_host:(=%
		set IP_host=%IP_host:首选=%
		set IP_host=%IP_host:)=%
	)
	:: 显示
	echo.
	echo 本机名称:	[%Name_host%]
	echo 网卡名称:	[%Desc%]
	echo 网卡编号:	[%CrdNum%]
	echo 网卡IP:		[%IP_host%]	
	echo 网卡MAC:	[%MAC_host%]
	echo 连接名称:	[%Lan_Name%]
	echo.
	
::	set /p mode=[1:自动修改IP和MAC,2:匹配修改IP和MAC,3:只修改IP,4:只修改MAC,5:恢复MAC]:
	set /a mode=1
	
	:: =========== 读取配置 ===========
	for /f "tokens=1* delims=,:= " %%i in (%ipconfig_dir%) do (
		if "%%i"=="IP_find"			(set "IP_find=%%j")
		if "%%i"=="MAC_find"		(set "MAC_find=%%j")
		if "%%i"=="HOSTNAME_set"	(set "HOSTNAME_set=%%j")
		if "%%i"=="IP_set"			(set "IP_set=%%j")
		if "%%i"=="MAC_set"			(set "MAC_set=%%j")
		if "%%i"=="MASK_set"		(set "MASK_set=%%j")
		if "%%i"=="GATEWAY_set"		(set "GATEWAY_set=%%j")
		if "%%i"=="DNS1_set"		(set "DNS1_set=%%j")
		if "%%i"=="DNS2_set"		(set "DNS2_set=%%j")
	)
	
	:: 自动修改IP和MAC
	if %mode% == 1 (
		:: 自动修改主机名
		if "%HOSTNAME_set%" neq "" (
			reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v ComputerName /t reg_sz /d %HOSTNAME_set% /f >nul 2>nul 
			reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t reg_sz /d %HOSTNAME_set% /f >nul 2>nul 
			reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v Hostname /t reg_sz /d %HOSTNAME_set% /f >nul 2>nul 
			echo 你的主机名为:[%Name_host%]
			echo 修改主机名为:[%HOSTNAME_set%]
			echo 设置主机名完成
			echo.
		)
		:: 自动修改 IP
		if "%IP_set%" neq "" (
			:: 子网掩码检查
			if "%MASK_set%" equ "" (
				echo 子网掩码输入错误!请重试!
				pause>nul
				cls
				goto SETNETINFO
			)
			:: 设置静态IP
			echo 你的IP地址为:[%IP_host%]
			echo 修改IP地址为:[%IP_set%]
			echo 正在设置本机地址及子网掩码,请稍等......
			netsh interface ip set address "%Lan_Name%" source=static addr=%IP_set% mask=%MASK_set%
		) else (
			:: 设置动态IP
			echo 正在自动获取IP地址,请稍等......
			netsh interface ip set address name="%Lan_Name%" source=dhcp
		)
		:: 自动修改 MAC
		if "%MAC_set%" neq "" (
			goto SETMAC
		) else (
			:: 恢复MAC
			goto RSTMAC
		)
	)
	:: 匹配修改IP和MAC
	if %mode% == 2 (
		:: 匹配修改 IP
		if "%IP_find%"=="%IP_host%" (
			if "%IP_set%" neq "" (
				:: 子网掩码检查
				if "%MASK_set%" equ "" (
					echo 子网掩码输入错误!请重试!
					pause>nul
					cls
					goto SETNETINFO
				)
				:: 设置静态IP
				echo 你的IP地址为:[%IP_host%]
				echo 修改IP地址为:[%IP_set%]
				echo 正在设置本机地址及子网掩码,请稍等......
				netsh interface ip set address "%Lan_Name%" source=static addr=%IP_set% mask=%MASK_set%
			) else (
				:: 设置动态IP
				echo 正在自动获取IP地址,请稍等......
				netsh interface ip set address name="%Lan_Name%" source=dhcp
			)
		)
		:: 匹配修改 MAC
		if "%MAC_find%"=="%MAC_host%" (
			if "%MAC_set%" neq "" (
				goto SETMAC
			) else (
				:: 恢复MAC
				goto RSTMAC
			)
		)
	)
	:: 只修改IP
	if %mode% == 3 (
		if "%IP_set%" neq "" (
			:: 子网掩码检查
			if "%MASK_set%" equ "" (
				echo 子网掩码输入错误!请重试!
				pause>nul
				cls
				goto SETNETINFO
			)
			:: 设置静态IP
			echo 你的IP地址为:[%IP_host%]
			echo 修改IP地址为:[%IP_set%]
			echo 正在设置本机地址及子网掩码,请稍等......
			netsh interface ip set address "%Lan_Name%" source=static addr=%IP_set% mask=%MASK_set%
		) else (
			:: 设置动态IP
			echo 正在自动获取IP地址,请稍等......
			netsh interface ip set address name="%Lan_Name%" source=dhcp
		)
		:: 设置网络参数
		goto SETNET
	)
	:: 只修改MAC
	if %mode% == 4 (
		if "%MAC_set%" neq "" (
			goto SETMAC
		) else (
			:: 恢复MAC
			goto RSTMAC
		)
	)
	:: 恢复MAC
	if %mode% == 5 (
		:: 恢复 MAC
		goto RSTMAC
	)
	cls
goto SETNETINFO

:: 恢复 MAC
:RSTMAC
	echo 正在恢复本机物理地址,请稍等......
	
	:: 过滤字符串
	set MAC_set=%MAC_set:-=%
	
	if %CrdNum% GEQ 10 goto RSTREGB
goto RSTREGA

:: 在注册表中恢复 10位以内 NetworkAddress 网卡注册信息
:RSTREGA
	reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum%" /v NetworkAddress /f
	reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum%\Ndi\Params\NetworkAddress" /v Default /f
	reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum%\Ndi\Params\NetworkAddress" /v Default /t reg_sz /d "" /f
goto READNIC

:: 在注册表中恢复 大于10位 NetworkAddress 网卡注册信息
:RSTREGB
	reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum%" /v NetworkAddress /f
	reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum%\Ndi\Params\NetworkAddress" /v Default /f
	reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum%\Ndi\Params\NetworkAddress" /v Default /t reg_sz /d "" /f
goto READNIC

:: 修改 MAC
:SETMAC
	echo 你的MAC地址为:[%MAC_host%]
	echo 修改MAC地址为:[%MAC_set%]
	echo 正在设置本机物理地址,请稍等......
	
	:: 过滤字符串
	set MAC_set=%MAC_set:-=%
	
	if %CrdNum% GEQ 10 goto SETREGB
goto SETREGA

:: 在注册表中修改10位以内 NetworkAddress 网卡注册信息
:SETREGA
	reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum%" /v NetworkAddress /t reg_sz /d %MAC_set% /f
	reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum%\Ndi\Params\NetworkAddress" /v Default /f
	reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum%\Ndi\Params\NetworkAddress" /v Default /t reg_sz /d %MAC_set% /f
goto READNIC

:: 在注册表中修改大于10位 NetworkAddress 网卡注册信息
:SETREGB
	reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum%" /v NetworkAddress /t reg_sz /d %MAC_set% /f
	reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum%\Ndi\Params\NetworkAddress" /v Default /f
	reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum%\Ndi\Params\NetworkAddress" /v Default /t reg_sz /d %MAC_set% /f
goto READNIC

:: 读网卡ID和NICNAME
:READNIC
	if %CrdNum% GEQ 10 (
		:: 网卡编号大于10
		for /f "tokens=2*" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%CrdNum% /v NetCfgInstanceId') do (
			set CrdID=%%j
		)
	) else (
		:: 网卡编号不大于10
		for /f "tokens=2*" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%CrdNum% /v NetCfgInstanceId') do (
			set CrdID=%%j
		)
	)
	for /f "tokens=2*" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\%CrdID%\Connection /v Name') do (
		set NICname=%%j
	)
goto SETNET

:: 设置网络参数
:SETNET
	:: 设置网关
	if "%GATEWAY_set%" neq "" (
		echo 正在设置本机网关,请稍等......
		netsh interface ip set address "%Lan_Name%" gateway=%GATEWAY_set% gwmetric=1
	) else (
		echo 正在清空本机网关,请稍等......
		netsh interface ip delete address "%Lan_Name%" gateway=%GATEWAY_set%
	)
	:: 设置 DNS
	if "%DNS1_set%" neq "" (
		echo 正在设置首选DNS ,请稍等......
		netsh interface ip set dns "%Lan_Name%" source=static addr=%DNS1_set%
		if "%DNS2_set%" neq "" (
			echo 正在设置备用DNS ,请稍等......
			netsh interface ip add dns "%Lan_Name%" addr=%DNS2_set%
		)
	) else (
		echo 正在设置自动DNS ,请稍等......
		netsh interface ip set dns "%Lan_Name%" source=dhcp
	)
	:: 设置 WINS
	echo 正在设置WINS ,请稍等......
	netsh interface ip set wins name="%Lan_Name%" source=static addr=none
	:: 重启网卡
	netsh interface set interface %NICname% disabled disconnected %NICname%
	netsh interface set interface %NICname% enabled connected %NICname%
	:: 读取主机名
	for /f "tokens=2* delims=:" %%i in ('ipconfig/all^|findstr /c:"%f_Hostname%"') do (
		set "Name_host=%%i"
	)
	set Name_host=%Name_host: =%
	if "%Name_host%" equ "%HOSTNAME_set%" (
		set FileName=%HOSTNAME_set%
	) else (
		set FileName=%Name_host%
	)
	echo 设置完成!
	
	ipconfig /all>["%FileName%"].cfg
	echo 用户网络信息已保存在 [%FileName%].cfg 文件内
	pause>nul
:END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值