米老师给了一个批处理文件,很简单,经过我们改编成为现在这样可以在win7和xp下都可用的批处理。虽然段代码挺简单,但是却体现了软件开发的重要思想——复用!!
吾辈有待提高呀。。。
整了半天发现在if 和else中,不能说使用set命令。只好用goto了,并且win7下不能用arp -s命令绑定,需要用高级的绑定命令
@echo off
if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt
setlocal enabledelayedexpansion
if exist phyaddr.txt del phyaddr.txt
rem 查找指定行
set n=0
for /f "tokens=*" %%i in (ipconfig.txt) do (
set /a n+=1
if !n! equ 10 echo %%i>>phyaddr.txt
)
for /f "tokens=1" %%C in (phyaddr.txt) do set Cont=%%C
if %Cont%==物理地址. (
echo win7
goto win7
) else (
echo xp
goto winxp
)
:win7
if exist phyaddr.txt del phyaddr.txt
rem 查找指定行
set n=0
for /f "tokens=*" %%i in (ipconfig.txt) do (
set /a n+=1
if !n! equ 10 echo %%i>>phyaddr.txt
)
rem 找到本地的mac地址,给变量mac赋值
for /f "tokens=15" %%M in (phyaddr.txt) do set Mac=%%M
if exist IPAddr.txt del IPaddr.txt
find "IPv4 地址" ipconfig.txt >IPAddr.txt
rem 找到本地的ip
for /f "skip=2 tokens=16" %%I in (IPAddr.txt) do set IP=%%I
set var=%IP:~0,14%
::@echo on
arp -s %var% %Mac%
if exist GateIP.txt del GateIP.txt
find "默认网关" ipconfig.txt >GateIP.txt
rem 找到网关的ip
for /f "skip=2 tokens=15" %%G in (GateIP.txt) do set GateIP=%%G
if exist GateMac.txt del GateMac.txt
arp -a %GateIP% >GateMac.txt
rem 找到网关的mac地址
for /f "skip=3 tokens=2" %%H in (GateMac.txt) do set GateMac=%%H
netsh interface ipv4 show neighbors >ipv4.txt
set n=0
for /f "tokens=*" %%i in (ipv4.txt) do (
set /a n+=1
if !n! equ 1 echo %%i>>ipv4.txt
)
for /f "tokens=2" %%C in (ipv4.txt) do set ContD=%%C
set varD=%ContD:~0,2%
netsh interface ipv4 set neighbors %varD% %GateIP% %GateMac%
pause
if exist ipconfig.txt del ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
if exist IPAddr.txt del IPAddr.txt
if exist GateMac.txt del GateMac.txt
if exist GateIP.txt del GateIP.txt
if exist ipv4.txt del ipv4.txt
exit
:winxp
echo 执行xp
if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.txt >phyaddr.txt
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M
if exist IPAddr.txt del IPaddr.txt
find "IP Address" ipconfig.txt >IPAddr.txt
for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I
::@echo on
arp -s %IP% %Mac%
if exist GateIP.txt del GateIP.txt
find "Default Gateway" ipconfig.txt >GateIP.txt
for /f "skip=2 tokens=13" %%G in (GateIP.txt) do set GateIP=%%G
if exist GateMac.txt del GateMac.txt
arp -a %GateIP% >GateMac.txt
for /f "skip=3 tokens=2" %%H in (GateMac.txt) do set GateMac=%%H
arp -s %GateIP% %GateMac%
if exist ipconfig.txt del ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
if exist IPAddr.txt del IPAddr.txt
if exist GateMac.txt del GateMac.txt
if exist GateIP.txt del GateIP.txt
exit
不是很熟悉批处理命令,用了一个很笨的方法。