标题: [原创]我自己写的网管工具,欢迎批评指正.
[打印本页]
作者: 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 地址:
http://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
http://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
Quote: |
对于斑竹提出的关于工作组/域的操作只能在NT SERVER域控制器中实现 |
|
测试平台:xp sp2专业版
网络环境:家庭用户ADSL
根据我的试验,在非精简版的xp专业版中是可以利用wmic来更改工作组等参数的。
建议多研究研究wmic /?.
作者: tghksj
时间: 2006-12-9 01:15
Quote: |
Originally posted by 3742668 at 2006-12-7 11:37 PM:
测试平台:xp sp2专业版
网络环境:家庭用户ADSL
根据我的试验,在非精简版的xp专业版中是可以利用wmic来更改工作组等参数的。
建议多研究研究wmic /?. |
|
麻烦斑竹发一份WMIC下的操作步骤.学习一下.谢谢!
作者: 3742668
时间: 2006-12-10 02:40
Quote: |
Originally posted by tghksj at 2006-12-9 01:15:
麻烦斑竹发一份WMIC下的操作步骤.学习一下.谢谢! |
|
见4F最后给出的链接。
作者: tghksj
时间: 2006-12-10 05:21
我真晕!!!
你不说那是个联接,我还一直以为是你要请教呢!!!
谢谢了啊!
作者: lxmxn
时间: 2006-12-10 07:32
Quote: |
Originally posted by 3742668 at 2006-12-10 02:40:
见4F最后给出的链接。 |
|
我用那个链接里面的方法,即用 wmic computersystem ……来修改计算机名,试了几遍都没有成功,是照着一个个字符打上去的,可是还是不成功。不知道是怎么回事。