Board logo

标题: [文件操作] 批处理怎样获取本机MAC地址并替换掉指定文本中的MAC? [打印本页]

作者: qcll    时间: 2010-8-16 17:47     标题: 批处理怎样获取本机MAC地址并替换掉指定文本中的MAC?

本帖最后由 pcl_test 于 2016-7-21 22:48 编辑

我有一软件,运行时需把文件1.txt中的MAC地址全部改成本机的MAC地址,已知1.txt文件中MAC地址字符为第一行第13至30字符(包括空格和MAC地址中的—)下面还有N行里有MAC地址字符,位置不定。软件在U盘里要在不同的电脑上运行,每次手工替换很是麻烦,可以用批处理直接把1.txt中的MAC地址一次替换成当前主机的MAC吗?我有思路是先提取当前主机MAC地址,再读取1.txt中的MAC地址字符(也就是第一行的第13至30字符)然后用当前主机MAC地址完全替换1.txt中的MAC地址字符,追后启动软件,这样就可以实现在任何主机上运行而不用更改MAC地址啦,请高手帮我设计一下代码,不胜感激啊!
作者: a2035274    时间: 2010-8-17 08:44

你这个软件和Pro/E中的密钥类型相似
你可以根据这个贴子5楼的代码自己改一下
http://www.bathome.net/viewthrea ... amp;page=1#pid58143
1、因为在你的说的1.txt中MAC地址所有都是相同的所以可用找到并赋给变量MAC1

2、分离出机器的网卡MAC地址并赋给变量"MacAddress"
  1. ::::分离出机器的物理地址,并保存到 ( phyaddr.txt) 文件中
  2. if exist phyaddr.txt del phyaddr.txt
  3. if exist phyaddr1.txt del phyaddr1.txt
  4. find "Physical Address" ipconfig.txt >phyaddr.txt
  5. Set sc=1
  6. Set scfile=phyaddr.txt
  7. goto scan
  8. ::::多网卡时,扫描每个网卡MAC地址
  9. :rescan1
  10. Set sc=%sc%1
  11. Set scfile=phyaddr1.txt
  12. find /v "%strMac%" phyaddr.txt >%scfile%
  13. Goto scan
  14. :rescan2
  15. Set sc=%sc%1
  16. Set scfile=phyaddr.txt
  17. find /v "%strMac%" phyaddr1.txt >%scfile%
  18. Goto scan
  19. :scan
  20. ::::从(c:\phyaddr.txt)文件中取得物理地址字符串,并赋给变量"MacAddress"
  21. for /f "skip=2 tokens=12" %%M in (%scfile%) do set strMac=%%M
  22. ::::以变量"strMac"为关键字搜索(iplist.txt)中相同的字符串行,并保存到(PCCfg.txt)
  23. find "%strMac%" iplist.txt >PCCfg.txt
  24. ::::找出机器名(从"PCCfg.txt"中分离出 机器名字段,并赋给变量"CName")
  25. for /f "skip=2 tokens=1" %%N in (PCCfg.txt) do set CName=%%N
  26. if not "%CName%"=="" Goto found
  27. ::::支持最多扫描5个网卡
  28. If "%sc%"=="11111" Goto failed
  29. If "%sc%"=="1" Goto rescan1
  30. if %scfile%==phyaddr.txt Goto rescan1
  31. if %scfile%==phyaddr1.txt Goto rescan2
  32. :found
  33. ECHO 本机 MAC: %strMac%
  34. ECHO 目标名称: %CName%
  35. ::::显示IP地址. (从"PCCfg.txt"中分离出 IP地址字段,并赋给变量"IPAddress")
  36. for /f "skip=2 tokens=3" %%I in (PCCfg.txt) do set IPAddress=%%I
  37. ECHO 目标地址: %IPAddress%
  38. ::::显示网卡MAC地址.(从"PCCfg.txt"中分离出 MAC地址字段,并赋给变量"MacAddress")
  39. for /f "skip=2 tokens=2" %%M in (PCCfg.txt) do set MacAddress=%%M
  40. ECHO 目标 MAC: %MacAddress%
复制代码
3、用变量"MacAddress"替换MAC1就可以了。
我只是提供思路你可以根据你的具体情况慢慢改一下
作者: qcll    时间: 2010-8-17 16:00

谢谢楼上的,正解,确实是pro/e密匙,想把它绿化到移动硬盘或者u盘里去,我看了无数网页,自己写了一个,但最后有一些问题,先付1.txt文件及代码
1.txt文件
#REPLACE ALL 00-00-00-00-00-00 WITH YOURSELF PTC_HOST_ID
INCREMENT PROE_200 ptc_d 30.0 permanent uncounted \
EC7498757755369A3446 VENDOR_STRING="VSVER=2.0 \
LO=(0,3,6,7,9,10,14,16,17,19,21,22, \
23,24,25,26,29,30,31,32,34,35,36,37,40,41,45,47,48,51,52,53, \
54,55,56,57,59,60,61,62,63,65,66,67,69,71,72,73,74,77,91,92, \
93,94,97,100,104,106,108,115,116,117,118,119,120,121,122,123,125, \
126,127,128,131,133,134,135,137,139,140,141,148,155,156,157,158, \
159,160,161,163,164,167,168,187,188,189,190,191,192,193,194,195, \
196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,213,214,218,219,220,221,  \
222,223,224,225,226,227,228,229,230,235,236,237,238,239,240,241,242,243,244,245,246,247, \
        248,249,250,251,253,254,255,256,257,259,260,261,262,263,264,265,266,267,268,269,270,271,  \
        272,273,274,275,276,277,278)" \
HOSTID=PTC_HOSTID=00-00-00-00-00-00 SUPERSEDE \
vendor_info="VIVER=2.0 EXTERNAL_NAME=" ISSUER=Ghost/ZWT \
ISSUED=30-JAN-2008 NOTICE=ZWT SN=88888888 TS_OK SIGN2="0026 \
E605 D6D0 3FBD 2114 EEB5 7A87 1D8E DDF0 D3C7 4C49 D153 1E77 \
DF8C 61A1 091E B91F 662C 15EE EBAA B0F3 0A46 7A57 B345 8BAD \
D2EB 554D 3A4F C587 7F38"……………………一下还有N多不贴啦,其中00-00-00-00-00-00 是原始MAC地址



bat代码
@echo off
for /f "tokens=1,2 delims= " %%a in ('getmac^|find /i "-"') do (set newmac=%%a)
                                                                                                                                           ::提取当前主机mac赋值到newmac
for /f "tokens=1,* delims=:" %%i in ('findstr/n .* 1.txt') do (
if %%i equ 1 set on1=%%j)
set oldmac=%on1:~13,17%
                                                                                                                                                 ::提取1.txt文件中mac特征字符赋值到oldmac
(for /f "usebackq delims=" %%a in (1.txt) do (
  set v=%%a
                                                                                                                                               ::读取1.txt文件到v中
  setlocal enabledelayedexpansion
  set v=!v:%oldmac%=%newmac%!
                                                                                                                                                   ::用当前主机mac替换1.txt中mac字符
  echo.!v!
  endlocal
))> 1.txt
                                                                                                                                                                      ::保存替换后的文件到1.txt



问题来啦,最后保存替换后的文件到1.txt是一个0字节的文件,若保存为2.txt或者其他任意文件名都可以的,也即是说我想得到替换后1.txt可以先把原始文件改名成2.txt,然后查找替换2.txt生成1.txt。这样虽然可以但违背了我的设计意图,原始文件中的mac就不会变动,也就没必要用代码来提取原始文件的mac啦。我想要的就是原始文件是1.txt,得到替换后的1.txt文件,高手帮忙斧正一下代码啊,谢谢啦!

[ 本帖最后由 qcll 于 2010-8-17 19:27 编辑 ]
作者: qcll    时间: 2010-8-19 09:36

各位高手大哥们,没人知道问题初在哪里吗?
作者: a2035274    时间: 2010-8-21 08:23

其实你只需先生成2.txt,然后
if exsit 1.txt del 1.txt
ren 2.txt 1.txt
就可以了
给你提点建意,就是网卡是否存在以及多网卡的问题
如果你只为了你自己用,那就无所谓。要是别人也需要那就得考虑一下。
曾经给多网卡笔记本装过pro/e-2.0就出现这样的问题
2.0只认“本地连接1”如果是别的就不好用了。能不能自动改一下网络连接中的连接名称。
作者: a2035274    时间: 2010-8-30 18:24

这是我最后改的,你看能不能用
  1. @echo off&mode con cols=55 lines=6
  2. ::::修改密钥文件。用的时候把1.txt改名为密钥文件名lic.dat接着start keygen.bat
  3. ::::判断当前主机网卡状态
  4. for /f "tokens=1,2 delims= " %%a in ('getmac^|find /i "-"') do echo %%a>>a.txt
  5. if not exist a.txt (Goto found) else Goto taken
  6. :found
  7. ECHO  :::::::::::::::::::::::::::::::::::::::::::::::::::::
  8. ECHO  :: 请检索网卡是否存在并启用,密钥是基于网卡而生成的 ::
  9. ECHO  :: 若'LAN或Internet'接口名非'本地连接'请手动修改   ::
  10. ECHO  :::::::::::::::::::::::::::::::::::::::::::::::::::::
  11. set c=0ABCDEFabc9ABCDEF0
  12. :loop
  13. set /a num=%random%%%16
  14. call set col=0%%c:~%num%,1%%
  15. COLOR %col%
  16. ping -n 3 127.1>nul
  17. goto loop
  18. pause
  19. exit
  20. :taken
  21. color a
  22. ::::提取当前主机mac赋值到newmac
  23. for /f "tokens=1,* delims=:" %%b in ('findstr/n .* a.txt') do (
  24. if %%b equ 1 set on1=%%c)
  25. set newmac=%on1:~0,17%
  26. ::::提取1.txt文件中mac特征字符赋值到oldmac
  27. for /f "tokens=1,* delims=:" %%i in ('findstr/n .* 1.txt') do (
  28. if %%i equ 1 set on1=%%j)
  29. set oldmac=%on1:~13,17%
  30. ::::读取1.txt文件到v中
  31. (for /f "usebackq delims=" %%a in (1.txt) do (
  32. set v=%%a
  33. ::::用当前主机mac替换1.txt中mac字符
  34. setlocal enabledelayedexpansion
  35. set v=!v:%oldmac%=%newmac%!
  36. ::::保存替换后的文件到2.txt
  37. echo.!v!
  38. endlocal
  39. )
  40. )> 2.txt
  41. if exist a.txt del a.txt
  42. if exist 1.txt del 1.txt
  43. ren 2.txt 1.txt
  44. ECHO 操作成功
  45. start keygen.bat
  46. echo 注册成功
  47. pause
  48. exit
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2