标题: [文本处理] BAT脚本批量修改文件里的随机MAC遇到的问题~ [打印本页]
作者: psstudio 时间: 2023-2-7 12:33 标题: BAT脚本批量修改文件里的随机MAC遇到的问题~
借鉴坛子上的修改随机MAC代码:- @echo off&setlocal enabledelayedexpansion
-
- call:SJMac
-
- for /l %%a in (1 1 30) do (
- if %%a LSS 10 (
- findstr /iv "mac.address" 0%%a.ini >>f.ini
- echo mac.address = "%MAC%0%%a" >>f.ini
- move /y f.ini 0%%a.ini
- ) else (
- findstr /iv "mac.address" %%a.ini >>f.ini
- echo mac.address = "%MAC%%%a" >>f.ini
- move /y f.ini %%a.ini
- )
- )
-
- :SJMac
- set a=012345789ABCDEF
- set dew=26AE
- set /a d2=%random%%%3+1
- set /a b=%random%%%14+1
- set /a c=%random%%%14+1
- set /a d=%random%%%14+1
- set /a e=%random%%%14+1
- set /a f=%random%%%14+1
- set /a g=%random%%%14+1
- set /a h=%random%%%14+1
- set /a i=%random%%%14+1
- set /a j=%random%%%14+1
- set /a k=%random%%%14+1
- rem mac前10位:
- set MAC=!a:~%b%,1!!dew:~%d2%,1!:!a:~%d%,1!!a:~%e%,1!:!a:~%f%,1!!a:~%g%,1!:!a:~%h%,1!!a:~%i%,1!:!a:~%j%,1!!a:~%k%,1!:!
复制代码
用以上批处理代码处理同目录下的01.ini-30.ini 这30个文本文件时,最后一行的mac.address = "" 这里每个文件都是前10位的MAC地址是一样的,只有尾数是对应文件名来的,有没有办法让每个文件的前10位MAC地址也是随机的?
而且目前发现这个随机代码中,生成的mac里,第2位的数字并不像代码里所示固定有26AE,生成1万里都只有6AE,没有2! 还有就是也没有0这个数字! 并且除了第2位数字中有6,其它位数中也没有6出现? 请教一下是有什么禁忌吗?
作者: psstudio 时间: 2023-2-7 13:42
set a=0123456789ABCDEF
set dew=26AE
set /a d2=%random%%%4
set /a b=%random%%%16
set /a c=%random%%%16
set /a d=%random%%%16
set /a e=%random%%%16
set /a f=%random%%%16
set /a g=%random%%%16
set /a h=%random%%%16
set /a i=%random%%%16
set /a j=%random%%%16
set /a k=%random%%%16
这样修改后,第2位就有26AE了,而且其它位也有0和6了,但是不知道这样修改会有什么问题? 是会有不合理的MAC生成吗?
作者: qixiaobin0715 时间: 2023-2-7 15:27
与其贴出一堆让人头疼的代码,不如详细描述一下你的真实需求。
作者: psstudio 时间: 2023-2-7 15:43
回复 3# qixiaobin0715
我的需求是把同目录下的01.ini-30.ini里mac.address =这个字段生成随机的MAC地址前10位再加上末位的对应文件名的后2位组合。
作者: psstudio 时间: 2023-2-7 16:01
比如01.ini里现有字段: mac.address = "11:22:33:44:55:66"
通过批处理处理后变成: mac.address = "ab:cd:ef:12:34:01",前面ab:cd:ef:12:34这一段是随机的,最后的2位是和文件名对应,01.ini就是01,如果是30.ini 最后2位就是30.
作者: qixiaobin0715 时间: 2023-2-7 17:05
本帖最后由 qixiaobin0715 于 2023-2-7 17:14 编辑
回复 4# psstudio
帖子中未表达清楚,又没有提供测试文本,未经测试,代码可能会有问题:- @echo off
- set str1=0123456789ABCDEF
- set str2=26AE
- for /f "delims=" %%a in ('dir /b /a-d *.ini') do (
- setlocal enabledelayedexpansion
- findstr /liv "mac.address" "%%a">temp
- for /l %%i in (1,1,10) do (
- set /a n1=!random!%%16
- set /a n2=!random!%%4
- set /a n=%%i%%2
- if %%i equ 2 (
- for %%j in (!n2!) do set mac=!mac!!str2:~%%j,1!
- ) else (
- for %%j in (!n1!) do set mac=!mac!!str1:~%%j,1!
- )
- if !n! equ 0 set mac=!mac!:
- )
- echo,mac.address = "!mac!%%~na">>temp
- move "temp" "%%a"
- endlocal
- )
- pause
复制代码
作者: psstudio 时间: 2023-2-7 19:57
回复 6# qixiaobin0715
感谢大神~测试有效! 谢谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |