领星动网编程开发之爆炸小宇宙

cnitblog.com/lxasp - - 有一种信念叫做编程
posts - 54, comments - 34, trackbacks - 0, articles - 0
根据这份批处理的机房管理方案:
服务器使用Windows 2003,安装配置好DHCP,安装冰点还原企业版,生成控制台、客户机种子、客户机安装端。

客户机安装有冰点还原6企业版的种子,记得在XP的防火墙通过冰点种子的EXE文件访问网络。客户机安装有MAXDOS 6.0 硬盘版。客户机的IP地址设为自动分配。
客户机安装有NETOP SCHOOL的学生端。

将sethdid.exe(http://www.lxasp.com/udf/sethdidip.zip)放入C:\Windows目录,将本批处理ip.bat放在D:\,ip.bat里面的MAC列表先不要包含本机房的任何一个客户机的MAC。双击运行ip.bat,选1执行后,重启后立即进入MAXDOS的GHOST备份到服务器。

使用MAXDOS将刚刚备份到服务器的GHOST恢复到每台客户机。那么每台客户机GHOST自动重启后,就会自动以硬盘序列号为机名,然后IP地址为自动分配(因为服务器有DHCP)。

〖如果对机器名和IP地址没有顺序或特别要求的话,就不用看下面一段了〗

启动服务器的冰点还原控制台,在控制台的列表中应该就会有每台客户端的机名和MAC地址了(因为有冰点还原的种子和允许通过XP的防火墙)。那么从该列表中收集MAC地址,打开ip.bat,编辑其中的MAC列表(这里可以灵活运用Excel和EmEditor正则表达式来完成),里面的IP地址和机名可以随便起,但不要重复即可(因为接下来可以人手去每台修改的)。使用NETOP SCHOOL的教师端,将编辑好的ip.bat分发到每个客户机D:\,然后用教师端“运行”在程序里填:D:\ip.bat 在命令行参数里填:ask,确定后,那么应该每台客户机都会弹出黑色的命令行窗口询问机器名和IP地址后缀了,接下来就是人手到每台机器去设置机器名和IP地址了。

补充修改DNS的命令行:

netsh interface ip delete dns "本地连接" addr=all
netsh interface ip add dns "本地连接" addr=192.168.10.254


::::::::::::::::::::::::::::::::::::
::            ____       __       ::
::    ___     \   \     / /       ::
::   |   |     \   \   / /   领   ::
::   |   |      \   \ / /         ::
::   |   |       \  // /     星   ::
::   |   | _     / //  \          ::
::   |   || |   / / \   \    动   ::
::   |   || |  / /   \   \        ::
::   |   || | /_/     \___\  网   ::
::   |   || |___                  ::
::   |___||_____| www.lxasp.com   ::
::                                ::
::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 主要用于电脑机房的全网GHOST后的自动更改设置
:: 支持一台电脑有多张网卡(最多5块网卡)的机器
:: 使用方法:
:: 一、编辑好IP.BAT文件中的“机名、MAC、IP”等列表信息
::     (请事先收集好你的机房的“机名”“MAC”等信息)
:: 二、在制作GHOST 镜像文件前,复制IP.BAT文件到系统盘任意目录
::     (例如 C:\ 或 C:\Windows 等)并双击此IP.BAT文件
:: 三、进入DOS或光盘WINPE 运行 GHOST,创建系统盘的GHO镜像文件
:: 四、进行机房的全网 GHOST,完成后会自动运行IP.BAT并自动重启
:: 五、检查机房中的每台机器是否正确设置了“机名”和“IP”信息
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
@cls
ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::
ECHO :: GHOST完成后根据网卡MAC自动设置机名和IP的批处理 ::
ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::


::::清空环境变量
Set IPAddress
=
Set strMac
=
Set MacAddress
=
Set CName
=
Set scfile
=
Set sc
=
Set MacWMIC
=
Set ConnName
=
Set noboot
=
set needask
=

If 
"%1"=="ask" set needask=1
If 
"%1"=="ask" Goto tobegin
If 
"%1"=="run" Goto tobegin

:premenu
echo.
echo.     
1 = 制作自动启动的快捷方式
echo.     
2 = 全自动更改机名和IP地址  -- 命令行参数: run
echo.     
3 = 可手动更改机名和IP地址  -- 命令行参数: ask
echo.         (其他按键默认执行此项)
echo.
echo.         ( Enter
[回车] = 退出 )
echo.
set /p input
=-^> 请选择要进入的运行模式: 
if 
"%input%"== "" goto end
if 
"%input%"== "1" goto setboot
if 
"%input%"== "3" set needask=1
if not 
"%input%"== "" set needask=1
if 
"%input%"== "2" set needask=

:tobegin

cd/d %temp%

REM ::::请手动修改列表
ECHO 
[ComputerName] [MacAddress] [IPAddress] >iplist.txt
ECHO LX001  
00-0C-29-66-7F-8D  192.168.10.1 >>iplist.txt
ECHO LX002  
00-04-01-02-09-91  192.168.10.2 >>iplist.txt
ECHO LX003  
00-04-01-02-09-92  192.168.10.3 >>iplist.txt
ECHO LX004  
00-04-01-02-09-93  192.168.10.4 >>iplist.txt
ECHO LXASP  
00-03-FF-93-39-9F  192.168.0.10 >>iplist.txt

REM ::::请手动修改子网掩码
Set mask
=255.255.255.0
REM ::::请手动修改默认网关
Set gway
=192.168.10.254

REM ::::请手动修改IP前缀(用于手动改名)
Set IPPrefix
=192.168.10.

REM ::::请手动修改硬盘序列号机名前缀(用于找不到网卡)
Set HDPrefix
=HD-

ECHO :::: 开始查找网卡 ::::

::::获取机器的TCP/IP 配置
if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt

::::分离出机器的物理地址,并保存到 ( phyaddr.txt) 文件中
if exist phyaddr.txt del phyaddr.txt
if exist phyaddr1.txt del phyaddr1.txt
find 
"Physical Address" ipconfig.txt >phyaddr.txt

Set sc
=1
Set scfile
=phyaddr.txt
goto scan

::::多网卡时,扫描每个网卡MAC地址
:rescan1
Set sc
=%sc%1
Set scfile
=phyaddr1.txt
find /v 
"%strMac%" phyaddr.txt >%scfile%
Goto scan

:rescan2
Set sc
=%sc%1
Set scfile
=phyaddr.txt
find /v 
"%strMac%" phyaddr1.txt >%scfile%
Goto scan

:scan
::::从(c:\phyaddr.txt)文件中取得物理地址字符串,并赋给变量
"MacAddress"
for /f 
"skip=2 tokens=12" %%M in (%scfile%) do set strMac=%%M

::::以变量
"strMac"为关键字搜索(iplist.txt)中相同的字符串行,并保存到(PCCfg.txt)
find 
"%strMac%" iplist.txt >PCCfg.txt

::::找出机器名(从
"PCCfg.txt"中分离出 机器名字段,并赋给变量"CName")
for /f 
"skip=2 tokens=1" %%N in (PCCfg.txt) do set CName=%%N

if not 
"%CName%"=="" Goto found
::::支持最多扫描5个网卡
If 
"%sc%"=="11111" Goto failed
If 
"%sc%"=="1" Goto rescan1
if %scfile%
==phyaddr.txt Goto rescan1
if %scfile%
==phyaddr1.txt Goto rescan2
:found
ECHO 本机 MAC: %strMac%

::::显示网卡MAC地址.(从
"PCCfg.txt"中分离出 MAC地址字段,并赋给变量"MacAddress")
for /f 
"skip=2 tokens=2" %%M in (PCCfg.txt) do set MacAddress=%%M
ECHO 目标 MAC: %MacAddress%

ECHO 目标名称: %CName%

::::显示IP地址. (从
"PCCfg.txt"中分离出 IP地址字段,并赋给变量"IPAddress")
for /f 
"skip=2 tokens=3" %%I in (PCCfg.txt) do set IPAddress=%%I
ECHO 目标地址: %IPAddress%

If not 
"%needask%"=="1" Goto noaskset
:beginask
set input1
=
set input2
=
set inputa
=
ECHO.

set /p input1
=-^> 机器名(回车则采用预设的): 

ECHO IP前缀为: %IPPrefix%

set /p input2
=-^> IP后缀(回车则采用预设的): 

if not 
"%input1%"=="" set CName=%input1%
if not 
"%input2%"=="" set IPAddress=%IPPrefix%%input2%

ECHO 新输入的目标地址: %IPAddress%  目标机名: %CName%

set /p inputa
=-^> 确认修改请按回车,再次输入请按 N 并回车,终止请按 Q 并回车: 

if 
"%inputa%"=="n" goto beginask
if 
"%inputa%"=="N" goto beginask

if 
"%inputa%"=="q" goto prequit
if 
"%inputa%"=="Q" goto prequit



:noaskset
::::创建注册表文件
::::用变量
"%CName%"去替换实际的机器名
ECHO Windows Registry Editor Version 
5.00 >PCName.reg
ECHO.>>PCName.reg
ECHO 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName] >>PCName.reg
ECHO 
"ComputerName"="%CName%" >>PCName.reg
ECHO.>>PCName.reg
ECHO 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] >>PCName.reg
ECHO 
"NV Hostname"="%CName%" >>PCName.reg
ECHO 
"Hostname"="%CName%" >>PCName.reg

ECHO :::: 正在更改设置 ::::
REM ::::导入注册表文件。用的时候把
" :: "去掉
regedit /s PCName.reg

::::找出MAC地址所对应的连接名称
for /f 
"tokens=1,2,3,4,5,6 delims=-" %%A in ("%MacAddress%") do set MacWMIC=%%A:%%B:%%C:%%D:%%E:%%F

WMIC NIC WHERE 
"MACAddress='%MacWMIC%' AND NetConnectionID!=NULL" GET NetConnectionID /value >phyaddr.txt

WMIC NIC WHERE 
"MACAddress='%MacWMIC%' AND NetConnectionID!=NULL" GET NetConnectionID /value >phyaddr.txt

Type phyaddr.txt >phyaddr1.txt

for /f 
"skip=2 tokens=2* delims==" %%A in (phyaddr1.txt) do set ConnName=%%A

Echo 连接名称: %ConnName%

REM ::::修改IP地址。用的时候把
" :: "去掉
netsh interface ip set address name
="%ConnName%" source=static addr=%IPAddress% mask=%mask% gateway=%gway% gwmetric=1

REM ::::动态分配。用的时候把
" :: "去掉
::netsh interface ip set address name
="%ConnName%" source=dhcp 
::netsh interface ip set dns name
="%ConnName%" source=dhcp register=PRIMARY

Goto reboot

:setboot
Echo 
[Version] >ipstart.inf
Echo Signature
="$CHICAGO$" >>ipstart.inf
Echo 
[DefaultInstall] >>ipstart.inf
Echo UpdateInis 
= AddLink >>ipstart.inf
Echo 
[AddLink] >>ipstart.inf
Echo setup.ini
, progman.groups,, "group1=""%%16391%%""" >>ipstart.inf
Echo setup.ini
, group1,,"""IP"",""""""%%01%%\ip.bat"""" run"",,,,"""",""ip.bat""" >>ipstart.inf
RUNDLL32.EXE SETUPAPI.DLL
,InstallHinfSection DefaultInstall 128 .\ipstart.inf
del ipstart.inf

Echo 完成在“开始”菜单的“启动”中创建快捷方式。
Echo 请在此之后使用GHOST创建此分区的GHO镜像文件。
pause

Goto end

:prequit
set noboot
=1
goto reboot

:failed
ECHO !!!! 查找网卡失败 !!!!

ECHO !用硬盘序列号作为机名!
sethdid.exe /set %HDPrefix%

:reboot


::::删除临时文件
echo 
[version] > ipdel.inf
echo signature
=$chicago$ >> ipdel.inf
echo 
[defaultinstall] >> ipdel.inf
echo delfiles
=delfiles1 >> ipdel.inf
echo delfiles
=delfiles2 >> ipdel.inf
echo 
[destinationdirs] >> ipdel.inf
echo delfiles1
=16391 >> ipdel.inf
echo delfiles2
=01 >> ipdel.inf
echo 
[delfiles1] >> ipdel.inf
echo ip.lnk
,,,1 >> ipdel.inf
echo 
[delfiles2] >> ipdel.inf
echo PCCfg.txt
,,,1 >> ipdel.inf
echo PCName.reg
,,,1 >> ipdel.inf
echo ipconfig.txt
,,,1 >> ipdel.inf
echo iplist.txt
,,,1 >> ipdel.inf
echo phyaddr1.txt
,,,1 >> ipdel.inf
echo phyaddr.txt
,,,1 >> ipdel.inf
RUNDLL32.EXE SETUPAPI.DLL
,InstallHinfSection DefaultInstall 128 .\ipdel.inf
del ipdel.inf

If 
"%noboot%"=="1" Goto end
ECHO :::: 准备重启 ::::
::::准备重启的文件
setlocal
echo 
[version] > reboot.inf
echo signature
=$chicago$ >> reboot.inf
echo 
[defaultinstall] >> reboot.inf
REM ::::立即重启。用的时候把
" :: "去掉
RUNDLL32.EXE SETUPAPI.DLL
,InstallHinfSection DefaultInstall 1 .\reboot.inf
del reboot.inf

:end

Feedback

# re: GHOST完成后根据网卡MAC自动设置机名和IP的批处理  回复  更多评论   

2010-01-11 20:42 by horogo
这个批处理很有参考价值,先收藏了!

# re: GHOST完成后根据网卡MAC自动设置机名和IP的批处理  回复  更多评论   

2010-01-12 16:55 by 电暖袋
楼主强大,感谢分享

# re: GHOST完成后根据网卡MAC自动设置机名和IP的批处理  回复  更多评论   

2010-01-12 16:56 by 海鲜池
谢谢分享

# re: GHOST完成后根据网卡MAC自动设置机名和IP的批处理  回复  更多评论   

2010-02-04 23:23 by 不锈钢水箱
学习了,楼主的批处理做得很强大!

# re: GHOST完成后根据网卡MAC自动设置机名和IP的批处理  回复  更多评论   

2010-05-01 18:22 by 菜鸟
非常感谢
只有注册用户登录后才能发表评论。