您的位置:首页 > 其它

利用批处理文件修改机器名以及一些扩展

2008-05-06 13:59 225 查看
看到有人用Ghost文件还原了系统之后,在登入的时候,会弹出一个cmd的窗口要求输入新的HostName,感觉挺好玩的,就研究了下。我想原理应该就是简单地用批处理文件接受了用户输入的变量,而后再修改注册表里的对应项吧。下面是我参考了些资料,写的一个简单化的批处理文件:

@echo off
color a
set Name=%COMPUTERNAME%
:GetHostName
set /p Name=请输入新的机器名:
if %Name%==%COMPUTERNAME% goto GetHostName
reg add "HKLM\system\CurrentControlSet\services\tcpip\parameters" /v "NV Hostname" /d %Name% /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /d %Name% /f
echo 机器名已修改,重启后生效
pause
@echo on

这里用的是windows NT 5.1以后系统自带的reg.exe注册表工具修改注册表。有两个地方,我稍微介绍下。

1、如何使批处理文件接收用户的键盘输入
这里介绍两种方法,还有其他的方法欢迎提出。

其一,利用set命令。
set /P variable=[promptString],/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。提供的批处理文件就是使用了这种方法。

其二,利用%1、%2等传递参数。
如下一个批处理文件

@echo off
set Var=%1
echo %Var%
@echo on

在命令行提示符下,输入批处理文件名称再输入空格加上变量数值,就可以把数值赋给了变量Var。

2、关于注册表中机器名的存放位置和关系

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"NV Domain"=""
"NV Hostname"="MYCHAT-2xxx"
"Domain"=""
"Hostname"="MYCHAT-2xxx"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName]
"ComputerName"="MYCHAT-2xxx"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName]
"ComputerName"="MYCHAT-2xxx"

上边的注册表文件反映了修改机器名时涉及到的几个地方。
其中"Hostname"、"Domain"对应当前机器的全域名(FQDN,Fully Qualified Domain Name)","NV Hostname"和"NV Domain"将在下一次重启时覆盖"Hostname"和"Domain"处。ActiveComputerName处的"ComputerName"对应当前NetBIOS名,另一处ComputerName将
在下一次重启时覆盖ActiveComputerName处。我们在"我的电脑"的属性里修改机器名,只是修改了"NV Hostname","NV Domain"和"ComputerName"处的"ComputerName",这样就需要重启后才能覆盖当前的机器名。
FQDN和NetBIOS名之间没有必然的联系,NetBIOS名可用在很多地方,适用于TCP/IP、IPX/SPX、NetBEUI等实现了NetBIOS接口的通信协议。"nbtstat -A <target>"和设备管理器涉及到的都是当前NetBIOS名。FQDN却只用于TCP/IP协议,命令hostname.exe和ipconfig /all得到的就是FQDN里的主机名。本文出自 “tsingfu” 博客,请务必保留此出处http://tsingfu.blog.51cto.com/366160/75318
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: