自动设置网络.bat
:: code by fireghost57
:: modify: 2012.10.12
:: 本批处理可以自动生成配置文件,并可根据文件进行配置IP和MAC以及还原MAC操作
:: 配置文件中不需要配置的部分,只需置空即可,程序自行跳过
@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 IP_set = >> %ipconfig_dir%
echo MAC_set = >> %ipconfig_dir%
echo MASK_set = 255.255.255.128>> %ipconfig_dir%
echo GATEWAY_set = 10.64.210.251>> %ipconfig_dir%
echo DNS1_set = 10.64.208.108>> %ipconfig_dir%
echo DNS2_set = >> %ipconfig_dir%
)
Rem =========== 执行操作 ===========
:LISTEN
cls
set f_Host_Name=Name
set f_Desc=Description
set f_IP_host=IP Address
set f_MAC_host=Physical Address
:: 查找主机名
set /a g=0
set /a v=0
set /a line=0
for /f "tokens=2* delims=:" %%i in ('ipconfig/all^|findstr /c:"%f_Host_Name%"') do (
set /a g+=1
set /a v+=1
if !g! equ !v! (
set /a line+=1
set Host_Name=%%i
)
)
:: 语言跳转
set /a language=0
if %line% EQU 0 (
set /a language=1
goto LISTCN
)
goto PRINTINFO
goto LISTEN
:LISTCN
cls
set f_Host_Name=主机名
set f_Desc=描述
set f_IP_host=IPv4 地址
set f_MAC_host=物理地址
:: 查找主机名
set /a g=0
set /a v=0
set /a line=0
for /f "tokens=2* delims=:" %%i in ('ipconfig/all^|findstr /c:"%f_Host_Name%"') do (
set /a g+=1
set /a v+=1
if !g! equ !v! (
set /a line+=1
set Host_Name=%%i
)
)
goto PRINTINFO
goto LISTCN
:: 生成用户信息
:PRINTINFO
:: 过滤字符串
set Host_Name=%Host_Name: =%
:: 输出信息
ipconfig /all>[%Host_Name%].cfg
goto GETDESC
:: 获取网卡描述
:GETDESC
:: 获取网卡描述信息在配置文件中的位置
set /a line=0
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"%f_Desc%" [%Host_Name%].cfg') do
(
set /a line+=1
set Search_!line!=%%i
)
:: 存储网卡描述
set /a g=0
set /a v=0
set /a line=0
for /f "tokens=2 delims=:" %%i in ('findstr /c:"%f_Desc%" [%Host_Name%].cfg') do (
set /a g+=1
set /a v+=1
:: 输出网卡信息
if !g! equ !v! (
echo !g!.%%i
set /a line+=1
)
set Desc_!line!=%%i
)
:: 用户选择
echo 发现%line%条网卡信息.
set /p num=请输入要处理的网卡序号:
set /a next_num=num+1
if "%num%" LEQ "%line%" (goto GETNETINFO)
echo 输入错误,请重新输入.
pause>nul
cls
goto GETDESC
:: 获取网络信息
:GETNETINFO
:: 查找IP信息
set "IP_host= "
for /f "tokens=1,3 delims=:" %%i in ('findstr /n /c:"%f_IP_host%" [%
Host_Name%].cfg') do (
if !num! neq !line! (
:: 不是最大值
if !Search_%num%! leq %%i (
if %%i leq !Search_%next_num%! (
set IP_host=%%j
)
)
) else (
:: 是最大值
if !Search_%num%! leq %%i (
set IP_host=%%j
)
)
)
:: 查找MAC信息
set "MAC_host= "
for /f "tokens=1,3 delims=:" %%i in ('findstr /n /c:"%f_MAC_host%" [%
Host_Name%].cfg') do (
if !num! neq !line! (
:: 不是最大值
if !Search_%num%! leq %%i (
if %%i leq !Search_%next_num%! (
set MAC_host=%%j
)
)
) else (
:: 是最大值
if !Search_%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 Host_Name=%Host_Name: =%
set Desc=%Desc:~1%
set IP_host=%IP_host: =%
set MAC_host=%MAC_host: =%
if %language% == 1 (
set IP_host=%IP_host:(=%
set IP_host=%IP_host:首选=%
set IP_host=%IP_host:)=%
)
:: 显示
echo 本机名称: [%Host_Name%]
echo 网卡名称: [%Desc%]
echo 网卡编号: [%CrdNum%]
echo 网卡IP: [%IP_host%]
echo 网卡MAC: [%MAC_host%]
set /p mode=[1:自动修改IP和MAC,2:匹配修改IP和MAC,3:只修改IP,4:只修改MAC,5:恢复MAC]:
:: =========== 读取配置 ===========
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"=="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 (
:: 自动修改 IP
if "%IP_set%" neq "" (
:: 子网掩码检查
if "%MASK_set%" equ "" (
echo 子网掩码输入错误!请重试!
pause>nul
cls
goto SETNETINFO
)
echo 你的IP地址为:[%IP_host%]
echo 修改IP地址为:[%IP_set%]
echo 正在设置本机地址及子网掩码,请稍等......
netsh interface ip set address "本地连接" source = static addr = %
IP_set% mask=%MASK_set%
)
:: 自动修改 MAC
if "%MAC_set%" neq "" (
goto SETMAC
)
:: 读取网卡信息
goto READNIC
)
:: 匹配修改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
)
echo 你的IP地址为:[%IP_host%]
echo 修改IP地址为:[%IP_set%]
echo 正在设置本机地址及子网掩码,请稍等......
netsh interface ip set address "本地连接" source = static
addr = %IP_set% mask=%MASK_set%
)
)
:: 匹配修改 MAC
if "%MAC_find%"=="%MAC_host%" (
if "%MAC_set%" neq "" (
goto SETMAC
)
)
:: 读取网卡信息
goto READNIC
)
:: 只修改IP
if %mode% == 3 (
:: 只修改 IP
if "%IP_set%" neq "" (
:: 子网掩码检查
if "%MASK_set%" equ "" (
echo 子网掩码输入错误!请重试!
pause>nul
cls
goto SETNETINFO
)
echo 你的IP地址为:[%IP_host%]
echo 修改IP地址为:[%IP_set%]
echo 正在设置本机地址及子网掩码,请稍等......
netsh interface ip set address "本地连接" source = static addr = %
IP_set% mask=%MASK_set%
)
:: 读取网卡信息
goto READNIC
)
:: 只修改MAC
if %mode% == 4 (
:: 只修改 MAC
if "%MAC_set%" neq "" (
goto SETMAC
)
:: 读取网卡信息
goto READNIC
)
:: 恢复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
:: 读网卡ID和NICNAME
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 RSTNET
:: 在注册表中恢复 大于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
:: 读网卡ID和NICNAME
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
)
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 RSTNET
:: 修改 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
:: 读网卡ID和NICNAME
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 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
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
)
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 "本地连接" gateway = %GATEWAY_set% gwmetric
=1
)
:: 设置 DNS1
if "%DNS1_set%" neq "" (
echo 正在设置首选DNS ,请稍等......
netsh interface ip set dns "本地连接" source = static addr = %DNS1_set%
)
:: 设置 DNS2
if "%DNS2_set%" neq "" (
echo 正在设置备用DNS ,请稍等......
netsh interface ip add dns "本地连接" addr= %DNS2_set%
)
:: 设置 WINS
echo 正在设置WINS ,请稍等......
netsh interface ip set wins name="本地连接" source=static addr=none
goto RSTNET
:: 重启网卡
:RSTNET
netsh interface set interface %NICname% DISABLED DISCONNECTED %NICname%
netsh interface set interface %NICname% ENABLED CONNECTED %NICname%
goto END
:END
echo 设置完成!
ipconfig /all>[%Host_Name%].cfg
echo 用户网络信息已保存在 [%Host_Name%].cfg 文件内
pause>nul