vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

根据mac地址自动修改ip地址、网关、dns、计算机名、工作组等(2008.07.09最后更新)

21:20 , vkill
不受 网卡驱动、网络连接名、物理网卡的个数 的限制,自定义修改灵活




一些错误信息的解决方法:

1、C:\>wmic path win32_pnpsigneddriver
节点 - s-151
错误:
描述 = 提供程序加载失败

解决方法:是msinfo.dll没有注册的问题,www.zhaodll.com上下载一个msinfo.dll复制到"%SystemRoot%\pchealth\helpctr\binaries\"目录重新注册下就ok 了

2、C:\>wmic path win32_pnpsigneddriver
错误:
代码 = 0x8007007e
说明 = 找不到制定的模块
设备 = win32

解决方法:暂时未知
网上一段说明
Quotation
http://forums.microsoft.com/china/ShowPost.aspx?PostID=1971041&SiteID=15
出现 error 0x8007007e消息
原因:通常是因为系统中的Urlmon.dll文件和Cabinwr.dll文件丢失或者没有注册引起的 .
解决:
在XP下: 运行 SFC 替换这两个文件即可. 运行 Sfc /Scanonce
在 Win2K 下:
1.运行: Regsvr32 urlmon.dll 如果还是不行,请尝试以下的方法:
2.进入[控制面板→添加/删除程序],选择 Microsoft Internet Explorer 后单击 [更改/删除]按钮,选择 [修复Internet Explorer],并跟随指示进行修复即可.
3.尝试安装Microsoft XML Parser的最新版本,当前版本是Microsoft XML Parser3.0 sp2.
下载链接为: http://www.microsoft.com/downloads/details.aspx?FamilyId=B1AD2C0A-8CC6-443B- AB83-F8516C72FAC1&displaylang=en


auto_set_ip_v1.7.cmd代码

@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
:::::::::::::::::::::::::::::::::::::::::::::::::::
::auto_set_ip_v1.7.cmd
::根据mac地址自动修改ip地址、网关、dns、计算机名、工作组等
::code by:vkill
:::::::::::::::::::::::::::::::::::::::::::::::::::
::更新记录
::2008.07.01  v1.0  完成基本的功能
::2008.07.04  v1.2  修改ip地址由原来的netsh命令转为wmic命令
::                  增加修改工作组功能
::                  增加可以按照ip来得到自动得到标准mask
::                  增加自动判断物理网卡型号
::                  增加了可不修改dns 网关等判断
::2008.07.06  v1.4  去掉了devcon外部命令的支持,全部使用wmic来完成
::                  在配置ip前增加了确认信息,用了一个等待用户确认的高级用法
::                  增加记录ip准配置日志功能
::                  增加了备份ip信息功能
::                  增加了可自定义数据库存放在本脚本还是外部文件中的功能
::2008.07.08  v1.6  修正匹配网卡型号时条件太多的问题
::                  增加如安装有多物理网卡时让你选择的功能
::                  增加修改ip、dns等根据返回值判断是否修改成功
::                  去掉备份准配置信息的功能
::2008.07.09  v1.7  修正了因为是系统缺少dll而提示找不到网卡的问题
:::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::
::变量设置
::设置为外部数据库时需要把:::::::::database_start::::::::::和:::::::::database_end::::::::::::之间的数据复制到制定的文件中
set "datebase=ip.txt"
::如果要把数据库存放在本脚本内就把下面这行 ::set "datebase=%~0" 的注释去掉
set "datebase=%~0"
set "t=%random%"
:::::::::::::::::::::::::::::::::::::::::::::::::::
goto :start_

:::::::::::::::::::::::::::::::::
:::::::::database_start::::::::::
:::::::::::::::::::::::::::::::::
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;readme
;注意:分隔符是 [tab],可用excel打开来修改
;mac_address----中间可以是 : 也可以是 - ,例子( 00:01:23:45:67:89 或者 00-01-23-45-67-89 )
;enabledhcp----(0/1),如为1表示将设置为dhcp,后面的addr mask等等都不生效,为0则反之
;mask----如设置为standard,那么将根据你设置的ip地址自动来计算并设置为标准的mask,如想用子网,那么这里就照情况写,如255.255.255.224
;mac_address / enabledhcp / addr / mask ----这四项必须
;hostname / workgroup / gateway / dns_primary / dns_second ----各项,如不想修改,保持原样,可写为 none
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;mac_address  hostname  workgroup  enabledhcp  addr  mask  gateway  dns_primary  dns_second  
;00:01:23:45:67:89  test  myhost  0  192.168.251.100  standard  192.168.251.254  202.100.64.68  202.100.64.66
00-1E-90-79-7F-E3  admin  myhost  0  192.168.251.116  standard  192.168.251.254  192.168.251.254  202.100.64.68
:::::::::::::::::::::::::::::::::
:::::::::database_end::::::::::::
:::::::::::::::::::::::::::::::::


::start::::::::::
:start_
title auto_set_ip_v1.6.cmd
if not exist "%datebase%" (call :error "缺少数据库文件%datebase%")

::setp0--脚本功能介绍
cls
echo.
echo.
echo.
echo        _________________________________________________________________
echo.
echo             根据mac地址自动修改ip地址、网关、dns、计算机名、工作组等
echo.
echo         使用前请先修改%datebase%,建议使用excel来修改
echo         适合于只安装多个物理网卡
echo         如果需要把数据库放到本脚本内修改变量datebase,建议看脚本26行左右注释
echo.                  
echo                                           by:vkill  http://www.vkill.net
echo        _________________________________________________________________
set/p=                                                            3秒后继续...<nul
ping -n 4 127.1 >nul 2>nul

::##########################
:setp1
cls
echo 获取硬件信息中(如系统刚启动等待的时间要长一些)...
wmic path win32_pnpsigneddriver >nul 2>nul || (
    echo         执行wmic path win32_pnpsigneddriver发生错误
    echo         具体错误信息参见google baidu 等
    echo         部分错误信息参见http://bbs.wglm.net/read.php?tid=83464
    echo         错误信息如下
    echo        _________________________________________________________________
    echo c:\^>wmic path win32_pnpsigneddriver
    wmic path win32_pnpsigneddriver
    echo        _________________________________________________________________
    echo         任意键退出...
    pause >nul 2>nul
    exit /b
                                              )

::得到已安装的物理网卡型号
echo 获取网卡型号中...
wmic path win32_pnpsigneddriver where "deviceclass='net' and compatid like '%%\\%%'" get FriendlyName >"%temp%\%t%_1" 2>nul
wmic path win32_pnpsigneddriver where "deviceclass='net' and compatid like '%%\\%%'" get Description >"%temp%\%t%_2" 2>nul
set n=0
for /f "tokens=*" %%a in ('type "%temp%\%t%_2"') do (set/a n+=1 & set "a!n!=%%a")
set n=0
for /f "tokens=*" %%a in ('type "%temp%\%t%_1"') do (set/a n+=1 & set "b!n!=%%a")
cd.>"%temp%\%t%_4"
for /l %%? in (1,1,%n%) do (>>"%temp%\%t%_4" echo !a%%?!,!b%%?!)
cd.>"%temp%\%t%_5"
set n=0
for /f "skip=1 tokens=1-2 delims=," %%a in ('type "%temp%\%t%_4"') do (
    set/a n+=1 & set "!n!=%%b"
    if defined !n! (set "dd=%%b") else (set "dd=%%a")
    >>"%temp%\%t%_5" echo !dd!
                                                                        )
set n=0
for /f "tokens=*" %%? in ('type "%temp%\%t%_5"') do (set /a n+=1 & set "d!n!=%%?")
if not defined d1 (call :error "获取物理网卡型号失败,请确认你已经安装好了物理网卡及已以及已经正常驱动" & goto :eof)

if !n! GTR 1 (
    :xz_nd
    cls
    echo.
    echo.
    echo.
    echo        _________________________________________________________________
    echo.
    for /l %%? in (1,1,!n!) do (
        echo             %%? : !d%%?!
                               )
    echo.
    echo        _________________________________________________________________
    set/p=                  请输入你要设置的网卡的序号:<nul
    set/p "v= "
    for /l %%? in (1,1,!n!) do (if ^!v!==^%%? set "description=!d%%?!")
    if not defined description goto :xz_nd
             ) else (set "description=!d1!")

:loop
if "*!description:~-1!"=="* " (set "description=!description:~0,-1!") else (goto :loop_end)
goto :loop
:loop_end

::利用网卡型号来得到网卡的mac address和index
echo 获取网卡mac地址中...
wmic.exe nicconfig where "Description like '!Description!'" get index,MACAddress 2>nul |findstr ":" >"%temp%\%t%_3"
findstr . "%temp%\%t%_3" >nul 2>nul || (
     wmic.exe nicconfig where "Description like '!Description! - 数据包计划程序微型端口'" get index,MACAddress 2>nul |findstr ":" >"%temp%\%t%_3"
                          )
for /f "tokens=1-2 delims= " %%a in ('type "%temp%\%t%_3"') do (set "index=%%a" & set "mac_address=%%b")
if not defined mac_address (call :error "获取物理网卡!description! mac地址失败" & goto :eof)
::开始备份现有配置到一文件
echo 正在备份当前ip信息...
start /wait /min wmic.exe /OUTPUT:"backup_!mac_address!.log" nicconfig where "index='!index!'"

::##########################
:setp2
cls
type "%datebase%" | findstr /i /b "%mac_address%" >nul 2>nul ||(set "mac_address=%mac_address::=-%")
::根据%database%来匹配mac address来得到需要设置的ip信息
for /f "eol=; tokens=1-10 delims=  " %%a in ('"type "%datebase%" | findstr /i /b "%mac_address%" 2>nul"') do (
    set "hostname=%%b"
    set "workgroup=%%c"
    set "enabledhcp=%%d"
    set "addr=%%e"
    set "mask0=%%f"
    set "gateway=%%g"
    set "dns_primary=%%h"
    set "dns_second=%%i"
                                    )
if not defined hostname (call :error "数据库中没有此mac address : %mac_address% ,请联系管理员" & goto :eof)

::如果mask设置为标准,那么这里根据网段来计算得到mask
if "*%mask0%"=="*standard" (
        if %addr% LEQ 128 (set "mask=255.0.0.0") else (
          if %addr% LEQ 192 (set "mask=255.255.0.0") else (
                  if %addr% LEQ 223 (set "mask=255.255.255.0") else (
                          call :error "网段只可以设置为A类、B类、C类"  & goto :eof
                              )
                         )
                                                                          )
             ) else (set "mask=%mask0%")
echo.
echo.
echo.
echo                               准配置信息如下
echo        _________________________________________________________________
echo.
echo                  hostname : !hostname!
echo                 workgroup : !workgroup!
echo.
echo               Description : !Description!
echo          Physical Address : !mac_address!
echo              Dhcp Enabled : !enabledhcp!
if "*!enabledhcp!"=="*0" (
    echo                IP Address : !addr!
    echo               Subnet Mask : !mask!
    echo           Default Gateway : !gateway!
    echo               DNS Servers : !dns_primary!
    echo                             !dns_second!
                         )
echo.
echo        _________________________________________________________________
echo.
set/p=                        按y键确认开始配置: <nul
sc /? | findstr "32" >nul 2>nul || (exit /b)

::##########################
:setp3
cls
echo.
echo.
echo.
echo                               开始配置各信息
echo        _________________________________________________________________
echo.
::如enabledhcp为1设置为动态ip,如为0就设置静态ip
set "error="
if "*%enabledhcp%"=="*1" (call :enabledhcp) else (call :disabledhcp)

if not "*!workgroup!"=="*none" (
    set/p=         修改工作组中...<nul
    start /wait /min wmic /RECORD:"%temp%\%t%_11" computersystem where "name='%COMPUTERNAME%'" call joindomainorworkgroup "","","!workgroup!",1
    type "%temp%\%t%_11" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
                               )
if not "*!hostname!"=="*none" (
    set/p=         修改计算机名中...<nul
    start /wait /min wmic /RECORD:"%temp%\%t%_12" computersystem where "name='%COMPUTERNAME%'" rename "!hostname!"
    type "%temp%\%t%_12" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
                              )
echo        _________________________________________________________________
echo.
if not defined error (
    del /f/q/a "%temp%\%t%_*" >nul 2>nul
    echo          设置全部修改成功
    ping -n 5 127.1 >nul 2>nul
                      ) else (call :error "一些设置没有成功,请检查"  & goto :eof)
exit /b
goto :eof

::call:::::::::::::::::::::::::::::::
:error
for /l %%? in (1,1,10) do (echo             %~1 &ping -n 3 127.1 >nul 2>nul)
exit /b
::
:enabledhcp
set/p=         设置为自动获取中...<nul
start /wait /min wmic /RECORD:"%temp%\%t%_13"  path Win32_NetworkAdapterConfiguration.index=!index! call enabledhcp
type "%temp%\%t%_13" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
goto :eof
::
:disabledhcp
set/p=         设置ip地址中...<nul
start /wait /min wmic /RECORD:"%temp%\%t%_14" nicconfig where "index='!index!'" call enablestatic "!addr!","!mask!"
type "%temp%\%t%_14" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")

if not "*!gateway!"=="*none" (
    set/p=         设置网关中...<nul
    start /wait /min wmic /RECORD:"%temp%\%t%_15" nicconfig where "index='!index!'" call setgateways "!gateway!",1
    type "%temp%\%t%_15" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
                              )
if not "!dns_primary!"=="none" if "!dns_second!"=="none" (
    set/p=         设置主dns中...<nul
    start /wait /min wmic /RECORD:"%temp%\%t%_16" nicconfig where "index='!index!'" call setdnsdomain "'!dns_primary!'"
    start /wait /min wmic /RECORD:"%temp%\%t%_17" nicconfig where "index='!index!'" call SetDNSServerSearchOrder "'!dns_primary!'"
    type "%temp%\%t%_17" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
                                                          )
if "!dns_primary!"=="none" if not "!dns_second!"=="none" (
    set/p=         设置辅dns中...<nul
    start /wait /min wmic /RECORD:"%temp%\%t%_16" nicconfig where "index='!index!'" call setdnsdomain "'!dns_second!'"
    start /wait /min wmic /RECORD:"%temp%\%t%_17" nicconfig where "index='!index!'" call SetDNSServerSearchOrder "'!dns_second!'"
    type "%temp%\%t%_17" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
                                                          )
if not "!dns_primary!"=="none" if not "!dns_second!"=="none" (
    set/p=         设置主辅dns中...<nul
    start /wait /min wmic /RECORD:"%temp%\%t%_16" nicconfig where "index='!index!'" call setdnsdomain ^("!dns_primary!","!dns_second!"^)
    start /wait /min wmic /RECORD:"%temp%\%t%_17" nicconfig where "index='!index!'" call SetDNSServerSearchOrder ^("!dns_primary!","!dns_second!"^)
    type "%temp%\%t%_17" | findstr /i "ReturnValue = 0;$" >nul 2>nul && (echo ok) || (echo no & set "error=error")
                                                               )
goto :eof
::


Last modified by vkill on2008/07/09 18:39
类别:cmd script | Tags: , , , , , , , , | 1 条评论, 3018 次阅读
网友评论(1):
lakex
2008/11/22 09:41
如果再将程序修改一下,使用其可以自启动,自运行,自删除就非常棒了,,
Pages: 1/1 First page 1 Final page
发表评论:

Nickname: 
Email:
Site URI: