[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]望大神来完善根据MAC地址自动设置相应的IP、DNS等网络参数和计算机名的批处理

这个批处理(见附件),是在隔壁论坛找到的!(用途就是根据MAC地址,自动设置好预先设置的IP地址、DNS地址、计算机名)

用途:学校机房  以前做系统都是做好后,慢慢的一台一台的修改IP地址、DNS地址、计算机名,因为用到多媒体教学软件,所以上述信息得设置规范;

以前用XP系统时用过一个软件,作用和文中提到的批处理差不多,但现在系统升级为win7后就不能在使用了,所以现在又找到这个批处理,很好用;

但美中不足的时该批处理有个地方不足,就是修改计算机名,通过批处理已经设置好各种信息了,包括计算机名,批处理执行结束后,计算机名也能显示了,但通过多媒体软件显示出的,还是修改前的名字。

如:我做镜像时用的计算机名为A,我添加这个批处理后,所以信息(IP地址、DNS地址、计算机名)都能够按照我设置的更改好,依次还原系统后,在本机查看也能看到修改如:A1、A2、A3、A4、A5等等,
        但我从多媒体教学软件上看到的在线电脑名称还是全为A,就是说,在修改的本机上能发现已经生成新名字,但通过其他方式查看到的,名字是没有改变的;
       必须要手工的在更改一次,在多媒体教学软件上才能正常显示如A1、A2、A3、A4、A5等。

不知道我描述得是否正常,因为对批处理的了解不是很多,但确实知道它的好处,所以特来请教各位大神帮忙完善一下。


使用完该批处理,我都有重启计算机的,但还是一样的效果(本机显示修改正确了,但通过其他设备查看还是原来的名称)

最终代码见15楼 点我直达

2

评分人数

    • pcl_test: 勿随意删改原帖内容PB -6
    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

谢谢分享!楼主辛苦了!

TOP

回复  ygqiang
xy6538 发表于 2016-1-6 23:35



    这个挺好用的,就是修改计算机名老提示失败。

TOP

回复 15# xy6538


回复 5# xy6538


15楼的代码执行修改计算机名失败,下面是一段一键修改计算机名(不需要重启电脑)的代码,修改后能不能加入进去,实现不要重启电脑就能改计算机名?


下面是一段一键修改计算机名(不需要重启电脑)的代码:
    :name
set /p cname=请输入计算机名:

echo REGEDIT4 >c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName] >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\ComputerName\ComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] >> c:\windows\reg.reg
echo "NV Hostname"="%cname%" >> c:\windows\reg.reg
echo "Hostname"="%cname%" >> c:\windows\reg.reg

echo [HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\ShellNoRoam] >> c:\windows\reg.reg
echo @="%cname%" >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ActiveComputerName] >> c:\windows\reg.reg
echo "ComputerName"="%cname%" >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] >> c:\windows\reg.reg
echo "NV Hostname"="%cname%" >> c:\windows\reg.reg
echo "Hostname"="%cname%" >> c:\windows\reg.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] >> c:\windows\reg.reg
echo "DefaultDomainName"="%cname%" >> c:\windows\reg.reg
echo "AltDefaultDomainName"="%cname%" >> c:\windows\reg.reg

regedit /s c:\windows\reg.reg
cmd

TOP

运行该批处理出现:
正在修改计算机名
无可用范例。
'修改计算机名成功' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

TOP

回复 14# ygqiang
  1. @echo off
  2. ::1.设置环境变量
  3. set MASK=255.255.255.0
  4. set GATEWAY=192.168.31.1
  5. set DNS1=114.114.114.114
  6. set DNS2=114.114.114.110
  7. set WINS=192.168.31.1
  8. set run_log=%temp%\run_log.txt
  9. ::2.运行环境检查
  10. echo. >%run_log%
  11. echo. >>%run_log%
  12. echo ======================================>>%run_log%
  13. echo 运行时间 %date% %time% >>%run_log%
  14. echo ======================================>>%run_log%
  15. del %temp%\mac.txt >nul 2>nul
  16. del %temp%\a.txt >nul 2>nul
  17. wmic nic >nul 2>nul
  18. wmic nic >nul 2>nul >%temp%\a.txt && (find /i "MACAddress"  %temp%\a.txt >nul 2>nul || echo ************运行权限不够,请以管理员运行*****************  >>%run_log% && start  %run_log% &&exit)
  19. ::3.获取本机所有MAC,地址,格式为 XX-XX-XX-XX-XX-XX
  20. wmic nic get MACAddress >%temp%\name.txt && for /f "skip=1" %%i in ('type %temp%\name.txt') do for /f "tokens=1-6 delims=:" %%I in ("%%i") do echo %%I-%%J-%%K-%%L-%%M-%%N>>%temp%\mac.txt
  21. ::4.将获取到的本机MAC地址逐一到本批处理后面的列表去查找,匹配的通常是本地连接的MAC连接,将匹配的MAC地址保存下来。
  22. ::      注1:这种方式可以应对电脑上安装虚拟机,或者机器是win7及以上的系统,会有多个MAC。
  23. ::      注2:至少要有一个匹配MAC,如果找不到任何匹配MAC,则报错退出。这可以避免在没有收集MAC的机器上运行时,错误修改原来的信息。
  24. del %temp%\exist-mac.txt   >nul 2>nul
  25. for /f  %%i in (%temp%\mac.txt) do find /i "%%i" %0 >nul 2>nul && echo %%i>%temp%\exist-mac.txt
  26. if exist %temp%\exist-mac.txt (for /f %%i in (%temp%\exist-mac.txt) do set MAC=%%i) else (echo ************未找到匹配的MAC项,中断批处理执行************  >>%run_log%   &&start %run_log%  &&exit)
  27. ::5.获取找到MAC地址对应的网络连接名称,通常是本地连接,
  28. ::      注1:对于一些多网卡环境,如机器装有多块网卡,会生成本地连接 2的名称, 注意:2前面有个空格,
  29. ::      注2:还有一种情况,本地连接的名称被改,在学校机房,干这种事情的人大有人在
  30. for /f "tokens=1-6 delims=-" %%i in ("%MAC%") do set MAC1=%%i:%%j:%%k:%%l:%%m:%%n
  31. wmic nic where MACaddress="%MAC1%" get NetConnectionID >%temp%\mac1.txt && for /f "tokens=* skip=1" %%i in ('type %temp%\mac1.txt') do if NOT "%%i"=="" set NetConnectionID=%%i
  32. :intercept
  33. if "%NetConnectionID:~-1%"==" " set "NetConnectionID=%NetConnectionID:~0,-1%"&goto intercept
  34. ::6.获取预设的计算机名\IP地址\计算机描述信息
  35. for /f "tokens=1-4" %%i in ('more /e +10 %0 ^|find /i "%mac%"') do set name=%%i&& set IP=%%j&&  set desc=%%l
  36. if "%name%"=="" (echo ********************匹配MAC预设计算机信息不存在,本程序将退出********************  >>%run_log%   &&start %run_log%  &&exit)
  37. if "%ip%"==""   (echo ********************匹配MAC预设IP地址信息不存在,本程序将退出********************  >>%run_log%   &&start %run_log%  &&exit)
  38. if "%desc%"=="" (echo ********************匹配MAC预设计算机描述信息不存在,本程序将退出******************  >>%run_log%   &&start %run_log%  &&exit)
  39. for /f "tokens=1-3 skip=2" %%i in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\lanmanserver\parameters" /v srvcomment 2^>nul') do set current_desc1=%%k
  40. for /f "tokens=1-3 skip=2" %%i in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters" /v srvcomment 2^>nul') do set current_desc2=%%k
  41. wmic nicconfig where MACaddress="%MAC1%" get IPaddress>%temp%\a.txt && for /f "skip=1 delims=,{} " %%i in ('type %temp%\a.txt') do set current_ip=%%~i
  42. wmic nicconfig where MACaddress="%MAC1%" get IPSubnet>%temp%\a.txt &&for /f "skip=1 delims=,{} " %%i in ('type %temp%\a.txt') do set IPSubnet=%%~i
  43. wmic nicconfig where MACaddress="%MAC1%" get DefaultIPGateway>%temp%\a.txt &&for /f "skip=1 delims=,{} " %%i in ('type %temp%\a.txt') do set DefaultIPGateway=%%~i
  44. wmic nicconfig where MACaddress="%MAC1%" get DNSServerSearchOrder >%temp%\a.txt  && for /f "tokens=1-8 skip=1 delims=,{} " %%i in ('type %temp%\a.txt') do set current_DNS1=%%~i& set current_DNS2=%%~j& set DNS3=%%~k&  set DNS4=%%~l
  45. wmic nicconfig where MACaddress="%MAC1%" get WINSPrimaryServer>%temp%\a.txt &&for /f "skip=1 delims=,{} " %%i in ('type %temp%\a.txt') do set WINSPrimaryServer=%%i
  46. echo. **************************信息汇总********************************
  47. echo  网络连接名称    【%NetConnectionID%】
  48. echo  MAC地址为       【%mac%】
  49. echo  当前IP地址      【%current_ip%】 预设IP地址     【%IP%】
  50. echo  当前子网掩码    【%IPSubnet%】 预设子网掩码   【%MASK%】
  51. echo  当前默认网关    【%DefaultIPGateway%】 预设默认网关   【%GATEWAY%】
  52. echo  当前DNS1        【%current_DNS1%】 预设DNS1       【%DNS1%】
  53. echo  当前DNS2        【%current_DNS2%】 预设DNS2       【%DNS2%】
  54. echo  当前WINS服务器  【%WINSPrimaryServer%】 预设WINS服务器 【%WINS%】
  55. echo.
  56. echo  当前计算机名    【%current_name1%】 预设计算机名   【%name%】           
  57. echo  当前描述        【%current_desc1%】 预设计算机描述 【%desc%】         
  58. echo. *********************************************************************
  59. echo.
  60. ::7.执行判断、修改计算机名\IP地址\计算机描述信息
  61. if "%current_desc1%"=="%desc%" (echo 计算机注释1符合要求,跳过修改>>%run_log% ) else (echo 正在修改计算机注释1 && reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\lanmanserver\parameters" /v srvcomment /t reg_sz /d %desc% /f >nul 2>nul    && echo 修改计算机注释1成功 >>%run_log% || echo  ********************修改计算机注释1失败 ********************   >>%run_log%)
  62. if "%current_desc2%"=="%desc%" (echo 计算机注释2符合要求,跳过修改>>%run_log%) else (echo 正在修改计算机注释2 && reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters" /v srvcomment /t reg_sz /d %desc% /f >nul 2>nul && echo 修改计算机注释2成功>>%run_log%  || echo  ********************修改计算机注释2失败 ********************  >>%run_log%)
  63. if "%name%"=="%computername%" (
  64.     >>%run_log% echo 计算机名符合要求,跳过修改
  65. ) else (
  66.     echo 正在修改计算机名
  67.     wmic computersystem where "name='%computername%'" call rename %name%
  68.     if errorlevel 1 (
  69.         >>%run_log% echo ********************修改计算机名失败 ********************
  70.     ) else (
  71.         >>%run_log%echo 修改计算机名成功
  72.     )
  73. )
  74. if "%current_ip%"=="%IP%" (echo IP地址符合要求,跳过修改>>%run_log%) else (set change_pro=IP地址)
  75. if "%IPSubnet%"=="%MASK%" (echo 子网掩码符合要求,跳过修改>>%run_log%) else (set change_pro=%change_pro%、子网掩码)
  76. if "%DefaultIPGateway%"=="%GATEWAY%" (echo 默认网关地址符合要求,跳过修改>>%run_log%) else (set change_pro=%change_pro%、默认网关)
  77. if "%change_pro%"==""  (echo IP地址\子网掩码\默认网关符合要求,跳过修改>>%run_log%) else   (echo 正在修改%change_pro% &&  netsh interface ip set address "%NetConnectionID%" static %IP% %Mask% %GATEWAY% 1 >nul 2>nul   && echo 修改%change_pro%成功 >>%run_log%   || echo  ********************修改%change_pro%失败 ********************  >>%run_log%)
  78. if "%current_DNS1%"=="%DNS1%" (echo DNS1地址符合要求,跳过修改>>%run_log%) else (echo 正在修改DNS1地址 &&  netsh interface ip set dns "%NetConnectionID%" static %DNS1% register=PRIMARY >nul 2>nul   && echo 修改DNS1地址成功 >>%run_log%   || echo  ********************修改DNS1地址失败 ********************  >>%run_log%)
  79. if "%current_DNS2%"=="%DNS2%" (echo DNS2地址符合要求,跳过修改>>%run_log%) else (echo 正在修改DNS2地址 &&  netsh interface ip add dns "%NetConnectionID%"  %DNS2% index=2 >nul 2>nul   && echo 修改DNS2地址成功 >>%run_log%   || echo  ********************修改DNS2地址失败 ********************  >>%run_log%)
  80. if "%WINSPrimaryServer%"=="%WINS%" (echo WINS地址符合要求,跳过修改>>%run_log%) else (echo 正在修改WINS地址 &&  netsh interface ip set wins "%NetConnectionID%" static %WINS%  >nul 2>nul  && echo 修改WINS地址成功 >>%run_log%   || echo  ********************修改WINS地址失败 ********************  >>%run_log%)
  81. start %run_log%
  82. exit
  83. ::以下为预设信息区域
  84. 计算机名        新规划地址        MAC地址        计算机描述
  85. 12F-JF01-A002        192.168.12.102        54-04-a6-66-bd-bd        12楼机房A02
  86. 12F-JF01-A003        192.168.12.103        00-30-67-ba-0c-ac        12楼机房A03
  87. 12F-JF01-A004        192.168.12.104        00-e0-62-0b-1f-6c        12楼机房A04
  88. 12F-JF01-A005        192.168.12.105        bc-ae-c5-5d-65-c0        12楼机房A05
  89. 12F-JF01-A006        192.168.12.106        00-e0-66-02-29-5e        12楼机房A06
  90. 12F-JF01-A007        192.168.12.107        50-e5-49-be-c0-dc        12楼机房A07
  91. 12F-JF01-A008        192.168.12.108        00-e0-66-0d-71-d9        12楼机房A08
  92. 12F-JF01-A009        192.168.12.109        00-e0-66-02-dd-d8        12楼机房A09
复制代码

TOP

回复 13# xy6538


    最终的代码是??

TOP

回复 12# DAIC


    感谢,非常的感谢,帮忙解决了一个大难题,太厉害了,V5!

TOP

回复 9# xy6538


1、把你那个代码里面的以下内容删掉:
  1. for /f "tokens=1-3 skip=2" %%i in ('reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName 2^>nul') do set current_name1=%%k
  2. for /f "tokens=1-4 skip=2" %%i in ('reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" 2^>nul') do set current_name2=%%l
  3. for /f "tokens=1-3 skip=2" %%i in ('reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v Hostname 2^>nul') do set current_name3=%%k
复制代码
2、把你那个代码里面的以下内容:
  1. if "%name%"=="%current_name1%" (echo 计算机名1符合要求,跳过修改>>%run_log%) else (echo 正在修改计算机名1 &% add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t reg_sz /d %name% /f >nul 2>nul  && echo 修改计算机名1成功 >>%run_log%   || echo  ********************修改计算机名失败 ********************  >>%run_log%)
  2. if "%name%"=="%current_name2%" (echo 计算机名2符合要求,跳过修改>>%run_log%) else (echo 正在修改计算机名2 && reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t reg_sz /d %name% /f >nul 2>nul        && echo 修改计算机名2成功 >>%run_log%   || echo  ********************修改计算机名失败 ********************  >>%run_log%)
  3. if "%name%"=="%current_name3%" (echo 计算机名3符合要求,跳过修改>>%run_log%) else (echo 正在修改计算机名3 &&  reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters" /v Hostname /t reg_sz /d %name% /f >nul 2>nul            && echo 修改计算机名3成功 >>%run_log%   || echo  ********************修改计算机名失败 ********************  >>%run_log%)
复制代码
替换成:
  1. if "%name%"=="%computername%" (
  2.     >>%run_log% echo 计算机名符合要求,跳过修改
  3. ) else (
  4.     echo 正在修改计算机名
  5.     wmic computersystem where "name='%computername%'" call rename %name%
  6.     if errorlevel 1 (
  7.         >>%run_log% echo ********************修改计算机名失败 ********************
  8.     ) else (
  9.         >>%run_log%echo 修改计算机名成功
  10.     )
  11. )
复制代码
1

评分人数

TOP

回复 10# pcl_test

嗯,用7楼的方法修改完的计算机名能够识别了!但这个只合适修改单机吧!

TOP

本帖最后由 pcl_test 于 2016-1-4 21:08 编辑

回复 8# xy6538


    先把7楼的两行代码保存为bat文件运行,重启后看看计算机名是否改为BatHome,然后将多媒体软件主控端(极域?)关闭退出,重新打开(如果有刷新功能,直接刷新好了),看看主控上的计算机会不会更新
1

评分人数

TOP

回复 7# DAIC


    这个命令能否会根据MAC地址来设置指定的名字呢?

TOP

回复 7# DAIC


      这里得把什么内容替换了?本人才疏学浅,望指教

TOP

你找到的代码是通过 reg add 命令修改注册表来实现修改计算机名,试试用 wmic 命令效果如何:
  1. wmic computersystem where "name='%computername%'" call rename BatHome
  2. shutdown -r -f -t 0
复制代码
1

评分人数

TOP

其实不光隔壁论坛有这样的代码,这个论坛也有,可以参考一下别人的写法:
http://bbs.bathome.net/thread-2599-1-1.html#pid15896
http://bbs.bathome.net/thread-8891-1-1.html#pid58143
http://bbs.bathome.net/thread-13161-1-1.html

TOP

返回列表