Board logo

标题: [原创]我自己写的网管工具,欢迎批评指正. [打印本页]

作者: tghksj     时间: 2006-12-7 04:28    标题: [原创]我自己写的网管工具,欢迎批评指正.

我是最近几天来这里的 ,正好看见有朋友问如何通过识别MAC进行简单网络设置. 这几天在论坛上看到几为我现在难望其项背的高人, 现在还开贴贴出这段代码只为学习,希望大家批评指正. 代码是我在来之前就已经写好的,里面的地址是我的PHP论坛,只做我个人笔记和 方便几位要好朋友联系之用的,绝对排除做广告嫌疑!非联系本人请不要访问. 更新了一下,加入了时间同步 本来想写组合参数功能,由于今天时间有限没有写完就不写了. 争取下一版实现组合参数. 对于斑竹提出的关于工作组/域的操作只能在NT SERVER域控制器中实现 XP系统到现在为止我还没有找到相关命令行操作...(有知道的兄弟赐教一下.谢谢) :::------------------------------------------------------------------------ ::::::::20061206版 ::::::::本次更新修正了更改计算机名不完全的BUG。 ::::::::加入了同步服务器时间功能 /t 。 :::::::::::::::::::::::::::::::::::::::::::::::::::::CONFIG.txt::::::示例::::::::↓ ::::%%I %%j %%k %%l %%m %%n %%o ::::MAC COMPUTERNAME IP MASK GATEWAY DNS1 DNS2 ::::00-E0-4C-49-XX-XX t21 222.173.XX.XX 255.255.XXX.XXX 222.173.XX.XX 219.146.X.XXX 219.150.XX.XXX :::::::::::::::::::::::::::::::::::::::::::::::::::::CONFIG.txt::::::示例::::::::↑ @ECHO %dbg% OFF CLS ECHO "TGHKSJ.CMD" 版本20061206(以日期为版本号) 作者:tghksj 地址:w.vicp.net setlocal :VERSION ver | find /i "Windows XP" > nul IF NOT errorlevel 1 GOTO :START ECHO. ECHO. ECHO 此程序只在Windows XP操作系统下测试通过. ECHO 其他版本不能保证正常运行. GOTO :QUIT :START IF NOT "%~1"=="%*" GOTO :SYNTAX IF /I "%~1"=="/l" GOTO :LIST IF /I "%~1"=="/s" GOTO :SET IF /I "%~1"=="/t" GOTO :TTIME GOTO :HELP :SYNTAX echo. echo. echo !!参数错误!! echo ________________ echo 不带参数直接运行本程序将显示帮助信息,并按提示操作. echo. GOTO :HELP ::::::::::获取MAC IP NAME并保存::::::::::::::::::::::::::::::::::::::::::::::::::↓ :LIST Find "%COMPUTERNAME%" "%~dp0"CONFIG.txt > NUL IF %errorlevel% == 0 GOTO :HAVELIST FOR /F "usebackq eol=; tokens=2 delims=:" %%I in (`ipconfig /all^|find /i "Physical Address"`) do set MAC=%%I FOR /F "usebackq eol=; tokens=2 delims=:" %%I in (`ipconfig /all^|find /i "IP Address"`) do set IP=%%I FOR /F "usebackq eol=; tokens=2 delims=:" %%I in (`ipconfig /all^|find /i "Subnet Mask"`) do set MASK=%%I FOR /F "usebackq eol=; tokens=2 delims=:" %%I in (`ipconfig /all^|find /i "Default Gateway"`) do set GATEWAY=%%I FOR /F "usebackq eol=; tokens=2 delims=:" %%I in (`ipconfig /all^|find /i "DNS Servers"`) do set DNS1=%%I FOR /F "skip=19 tokens=1 usebackq" %%I in (`ipconfig /all`) do set DNS2=%%I ECHO %MAC% %COMPUTERNAME% %IP% %MASK% %GATEWAY% %DNS1% %DNS2%>>"%~dp0"CONFIG.txt IF /I "%~1"=="/l" EXIT ECHO 信息收集完毕并保存到 %~dp0CONFIG.txt GOTO :QUIT ::::::::::获取MAC IP NAME并保存::::::::::::::::::::::::::::::::::::::::::::::::::↑ ::::::::::识别MAC,并据此进行设置:::::::::::::::::::::::::::::::::::::::::::::::::↓ :SET FOR /F "usebackq eol=; tokens=2 delims=:" %%I in (`ipconfig /all^|find /i "Physical Address"`) do set MAC=%%I find /i "%MAC%" "%~dp0CONFIG.txt" > nul IF %errorlevel% == 1 GOTO :NO_LIST FOR /F "tokens=2,3,4,5,6,7" %%j in ('find /i "%MAC%" "%~dp0CONFIG.txt"') do ( SET TCOMPUTERNAME=%%j SET IP=%%k SET MASK=%%l SET GATEWAY=%%m SET DNS1=%%n SET DNS2=%%o ) REG ADD HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName /v "ComputerName" /t REG_SZ /d %TCOMPUTERNAME% /f REG ADD HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName /v "ComputerName" /t REG_SZ /d %TCOMPUTERNAME% /f REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v "Hostname" /t REG_SZ /d %TCOMPUTERNAME% /f REG ADD HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v "NV Hostname" /t REG_SZ /d %TCOMPUTERNAME% /f netsh interface ip set address name="本地连接" source=static addr=%IP% mask=%MASK% gateway=%GATEWAY% gwmetric=0 netsh interface ip set dns name="本地连接" source=static addr=%DNS1% register=PRIMARY netsh interface ip add dns name="本地连接" addr=%DNS2% IF /I "%~1"=="/s" GOTO :SHUT_Y echo. echo 提示: echo 信息设置完毕.建议按"R"重新启动.(推荐!) GOTO :SHUT_W ::::::::::识别MAC,并据此进行设置:::::::::::::::::::::::::::::::::::::::::::::::::↑ ::::::::::同步服务器时间:::::::::::::::::::::::::::::::::::::::::::::::::::::::::↓ :TTIME FOR /f "tokens=1 delims=\" %%i in ("%~dp0") do NET TIME \\%%i /SET /Y IF /I "%~1"=="/t" EXIT ECHO 时间同步为: %date% %time% GOTO :QUIT ::::::::::同步服务器时间:::::::::::::::::::::::::::::::::::::::::::::::::::::::::↑ :::::::::::::::::::::::重新启动计算机::::::::::::::::::::::::::::::::::::::::::::↓ :SHUT_Y shutdown -r -t 0 EXIT :SHUT_W echo ------------------------------- set /P CHS= [ 按"R"键重新启动 按"Q"键退出程序 按"H"键返回帮助 ]? if /I "%CHS%"=="R" GOTO :SHUT_Y if /I "%CHS%"=="Q" GOTO :QUIT if /I "%CHS%"=="H" GOTO :HELP CLS GOTO :SHUT_W :::::::::::::::::::::::重新启动计算机::::::::::::::::::::::::::::::::::::::::::::↑ :::::::::::::::::::::::帮助信息和手动选择::::::::::::::::::::::::::::::::::::::::↓ :HELP echo. echo -= 帮助 =- echo ------------------------------------------------------------------ echo. echo 可用参数: echo. echo /help 显示此帮助信息. echo /l 收集客户端信息.信息包括MAC地址、计算机名、IP、子网掩码、网关、DNS。 echo /s 自动设置客户机MAC地址、计算机名、IP、子网掩码、网关、DNS。 echo /t 同步本文件所在服务器时间. echo. echo 使用方法: echo 任选一台主机为服务器,服务器任意路径新 echo 建任意名文件夹设置"完全共享",存放此程序. echo 收集信息时客户机执行: echo \\服务器名\本程序所在文件夹共享名\TGHKSJ.CMD /l echo 更改客户端时客户机执行: echo \\服务器名\本程序所在文件夹共享名\TGHKSJ.CMD /s echo 同步服务器时间时客户机执行: echo \\服务器名\本程序所在文件夹共享名\TGHKSJ.CMD /t echo 或者手动执行此程序,按提示操作。 echo. echo ----------------------------------------------------------------- set /P CHS= [ 按"L"键收集信息 按"S"键设置信息 按"T"键同步时间 按"Q"键退出程序 ]? if /I "%CHS%"=="L" GOTO :LIST if /I "%CHS%"=="S" GOTO :SET if /I "%CHS%"=="T" GOTO :TTIME if /I "%CHS%"=="Q" GOTO :QUIT CLS GOTO :HELP :::::::::::::::::::::::帮助信息和手动选择::::::::::::::::::::::::::::::::::::::::↑ :::::::::::::::::::::::重复收集提示::::::::::::::::::::::::::::::::::::::::::::::↓ :HAVELIST IF /I "%~1"=="/l" EXIT ECHO. ECHO. ECHO. ECHO 提示: ECHO 本机信息先前已经收集过. ECHO. GOTO :QUIT :::::::::::::::::::::::重复收集提示::::::::::::::::::::::::::::::::::::::::::::::↑ :::::::::::::::::::::::无信息记录提示::::::::::::::::::::::::::::::::::::::::::::↓ :NO_LIST IF /I "%~1"=="/S" EXIT ECHO. ECHO. ECHO. ECHO 提示: ECHO 没有找到本机信息记录 ECHO 请检查%~dp0CONFIG.txt. ECHO. GOTO :HELP :::::::::::::::::::::::无信息记录提示::::::::::::::::::::::::::::::::::::::::::::↑ :::::::::::::::::::::::提示退出::::::::::::::::::::::::::::::::::::::::::::::::::↓ :QUIT echo ________________________________________________________ echo. echo w.vicp.net echo ________________________________________________________ echo [按任意键退出] echo ------------------------------------------------------ echo. if /I "%1"=="" pause>NUL :::::::::::::::::::::::提示退出::::::::::::::::::::::::::::::::::::::::::::::::::↑ [ Last edited by tghksj on 2006-12-7 at 03:52 PM ]

作者: tghksj     时间: 2006-12-7 05:19
刚才巧遇到 ::::: @echo off :: 代码编写:3742668 代码修订:namejm www.cn-dos.net ::调用格式: call :select "ip address" "ip" call :select "Physical Address" "mac" call :select "Default Gateway" "gateway" call :select "DNS Servers" "dns" call :select "Description" "netcard" :: 演示效果 echo IP:%ip% echo MAC:%mac% echo DNS:%dns% echo GATEWAY:%gateway% echo NETCARD:%netcard% pause>nul goto :eof ::************************************************************** :: 解析ipconfig命令输出通用函数 ::************************************************************** :select for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do if not "!%~2!" == "" set "%~2=%%i" goto :eof :::::: 可以对上面的获取段进行简化,可是DNS2有什么比较好的获取方式吗?排除我的算行方式. ------------------------------------- 越看越直冒冷汗.......()计算机名漏掉了一个项 reg add "HKLM\System\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v ComputerName /t reg_sz /d %TCOMPUTERNAME% /f reg add "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t reg_sz /d %TCOMPUTERNAME% /f reg add "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters" /v Hostname /t reg_sz /d %TCOMPUTERNAME% /f -------- 工作组也没有... net config workstation [ Last edited by tghksj on 2006-12-6 at 04:39 PM ]

作者: ccwan     时间: 2006-12-7 05:38
感觉不错了,偶等你更新^)^

作者: 3742668     时间: 2006-12-7 12:50
Re tghksj: 原贴中为了保证表格的美化,所以只获得一个网络连接的设置,如果当前计算机中有多个连接的话可以在前面加上setlocal enabledelayedexpansion,然后在:select中的for语句中把if语句更换为set "%~2=%%i !%~2!"。 至于获得2个dns,方法多种多样,再给个netsh版的吧:
for /f "skip=3 delims== tokens=1,2" %i in ('netsh diag show dns 1') do @if "%j" == "" (@echo %i) else (@echo %j)
命令行中测试通过。 另外: 请教,批处理下如何读取和修改本机计算机名和工作组?

作者: tghksj     时间: 2006-12-7 23:59
re 3742668 计算机名的读取可以用原有变量%COMPUTERNAME% 而修改时只能通过改写注册表的方式进行. 在1楼包含变量%TCOMPUTERNAME%句中即是相关处理手段,之所以有这个变量名是防止与原常设变量%COMPUTERNAME%冲突. 而对于工作组的相关处理,到现在我还未找到有相关命令或方法进行更改. 只知道工作组的获取方式为 net config workstation

作者: vkill     时间: 2006-12-8 05:43
呵呵,这些p很实用的哈

作者: 3742668     时间: 2006-12-8 12:37
对于斑竹提出的关于工作组/域的操作只能在NT SERVER域控制器中实现
测试平台:xp sp2专业版 网络环境:家庭用户ADSL 根据我的试验,在非精简版的xp专业版中是可以利用wmic来更改工作组等参数的。 建议多研究研究wmic /?.

作者: tghksj     时间: 2006-12-9 01:15
Originally posted by 3742668 at 2006-12-7 11:37 PM: 测试平台:xp sp2专业版 网络环境:家庭用户ADSL 根据我的试验,在非精简版的xp专业版中是可以利用wmic来更改工作组等参数的。 建议多研究研究wmic /?.
麻烦斑竹发一份WMIC下的操作步骤.学习一下.谢谢!

作者: 3742668     时间: 2006-12-10 02:40
Originally posted by tghksj at 2006-12-9 01:15: 麻烦斑竹发一份WMIC下的操作步骤.学习一下.谢谢!
见4F最后给出的链接。

作者: tghksj     时间: 2006-12-10 05:21
我真晕!!! 你不说那是个联接,我还一直以为是你要请教呢!!! 谢谢了啊!

作者: lxmxn     时间: 2006-12-10 07:32
Originally posted by 3742668 at 2006-12-10 02:40: 见4F最后给出的链接。
  我用那个链接里面的方法,即用 wmic computersystem ……来修改计算机名,试了几遍都没有成功,是照着一个个字符打上去的,可是还是不成功。不知道是怎么回事。