标题: [文件操作] 批处理怎样获取本机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"- ::::分离出机器的物理地址,并保存到 ( phyaddr.txt) 文件中
- if exist phyaddr.txt del phyaddr.txt
- if exist phyaddr1.txt del phyaddr1.txt
- find "Physical Address" ipconfig.txt >phyaddr.txt
- Set sc=1
- Set scfile=phyaddr.txt
- goto scan
- ::::多网卡时,扫描每个网卡MAC地址
- :rescan1
- Set sc=%sc%1
- Set scfile=phyaddr1.txt
- find /v "%strMac%" phyaddr.txt >%scfile%
- Goto scan
- :rescan2
- Set sc=%sc%1
- Set scfile=phyaddr.txt
- find /v "%strMac%" phyaddr1.txt >%scfile%
- Goto scan
- :scan
- ::::从(c:\phyaddr.txt)文件中取得物理地址字符串,并赋给变量"MacAddress"
- for /f "skip=2 tokens=12" %%M in (%scfile%) do set strMac=%%M
- ::::以变量"strMac"为关键字搜索(iplist.txt)中相同的字符串行,并保存到(PCCfg.txt)
- find "%strMac%" iplist.txt >PCCfg.txt
- ::::找出机器名(从"PCCfg.txt"中分离出 机器名字段,并赋给变量"CName")
- for /f "skip=2 tokens=1" %%N in (PCCfg.txt) do set CName=%%N
- if not "%CName%"=="" Goto found
- ::::支持最多扫描5个网卡
- If "%sc%"=="11111" Goto failed
- If "%sc%"=="1" Goto rescan1
- if %scfile%==phyaddr.txt Goto rescan1
- if %scfile%==phyaddr1.txt Goto rescan2
- :found
- ECHO 本机 MAC: %strMac%
- ECHO 目标名称: %CName%
- ::::显示IP地址. (从"PCCfg.txt"中分离出 IP地址字段,并赋给变量"IPAddress")
- for /f "skip=2 tokens=3" %%I in (PCCfg.txt) do set IPAddress=%%I
- ECHO 目标地址: %IPAddress%
- ::::显示网卡MAC地址.(从"PCCfg.txt"中分离出 MAC地址字段,并赋给变量"MacAddress")
- for /f "skip=2 tokens=2" %%M in (PCCfg.txt) do set MacAddress=%%M
- 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
这是我最后改的,你看能不能用
- @echo off&mode con cols=55 lines=6
- ::::修改密钥文件。用的时候把1.txt改名为密钥文件名lic.dat接着start keygen.bat
- ::::判断当前主机网卡状态
- for /f "tokens=1,2 delims= " %%a in ('getmac^|find /i "-"') do echo %%a>>a.txt
- if not exist a.txt (Goto found) else Goto taken
-
- :found
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::
- ECHO :: 请检索网卡是否存在并启用,密钥是基于网卡而生成的 ::
- ECHO :: 若'LAN或Internet'接口名非'本地连接'请手动修改 ::
- ECHO :::::::::::::::::::::::::::::::::::::::::::::::::::::
- set c=0ABCDEFabc9ABCDEF0
- :loop
- set /a num=%random%%%16
- call set col=0%%c:~%num%,1%%
- COLOR %col%
- ping -n 3 127.1>nul
- goto loop
- pause
- exit
-
- :taken
- color a
- ::::提取当前主机mac赋值到newmac
- for /f "tokens=1,* delims=:" %%b in ('findstr/n .* a.txt') do (
- if %%b equ 1 set on1=%%c)
- set newmac=%on1:~0,17%
-
- ::::提取1.txt文件中mac特征字符赋值到oldmac
- 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文件到v中
- (for /f "usebackq delims=" %%a in (1.txt) do (
- set v=%%a
-
- ::::用当前主机mac替换1.txt中mac字符
- setlocal enabledelayedexpansion
- set v=!v:%oldmac%=%newmac%!
-
- ::::保存替换后的文件到2.txt
- echo.!v!
- endlocal
- )
- )> 2.txt
- if exist a.txt del a.txt
- if exist 1.txt del 1.txt
- ren 2.txt 1.txt
- ECHO 操作成功
- start keygen.bat
- echo 注册成功
- pause
- exit
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |