首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

自动设立网络.bat

2012-10-17 
自动设置网络.bat:: code by fireghost57:: modify: 2012.10.12:: 本批处理可以自动生成配置文件,并可根据

自动设置网络.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

热点排行