Board logo

标题: [文本处理] BAT脚本批量修改文件里的随机MAC遇到的问题~ [打印本页]

作者: psstudio    时间: 2023-2-7 12:33     标题: BAT脚本批量修改文件里的随机MAC遇到的问题~

借鉴坛子上的修改随机MAC代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. call:SJMac
  3. for /l %%a in (1 1 30) do (
  4. if %%a LSS 10 (
  5. findstr /iv "mac.address" 0%%a.ini >>f.ini
  6. echo mac.address = "%MAC%0%%a" >>f.ini
  7. move /y f.ini 0%%a.ini
  8. ) else (
  9. findstr /iv "mac.address" %%a.ini >>f.ini
  10. echo mac.address = "%MAC%%%a" >>f.ini
  11. move /y f.ini %%a.ini
  12. )
  13. )
  14. :SJMac
  15. set a=012345789ABCDEF
  16. set dew=26AE
  17. set /a d2=%random%%%3+1
  18. set /a b=%random%%%14+1
  19. set /a c=%random%%%14+1
  20. set /a d=%random%%%14+1
  21. set /a e=%random%%%14+1
  22. set /a f=%random%%%14+1
  23. set /a g=%random%%%14+1
  24. set /a h=%random%%%14+1
  25. set /a i=%random%%%14+1
  26. set /a j=%random%%%14+1
  27. set /a k=%random%%%14+1
  28. rem mac前10位:
  29. 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
帖子中未表达清楚,又没有提供测试文本,未经测试,代码可能会有问题:
  1. @echo off
  2. set str1=0123456789ABCDEF
  3. set str2=26AE
  4. for /f "delims=" %%a in ('dir /b /a-d *.ini') do (
  5.     setlocal enabledelayedexpansion
  6.     findstr /liv "mac.address" "%%a">temp
  7.     for /l %%i in (1,1,10) do (
  8.         set /a n1=!random!%%16
  9.         set /a n2=!random!%%4
  10.         set /a n=%%i%%2
  11.         if %%i equ 2 (
  12.             for %%j in (!n2!) do set mac=!mac!!str2:~%%j,1!
  13.         ) else (
  14.             for %%j in (!n1!) do set mac=!mac!!str1:~%%j,1!
  15.         )
  16.         if !n! equ 0 set mac=!mac!:
  17.     )
  18.     echo,mac.address = "!mac!%%~na">>temp
  19.     move "temp" "%%a"
  20.     endlocal
  21. )
  22. pause
复制代码

作者: psstudio    时间: 2023-2-7 19:57

回复 6# qixiaobin0715
感谢大神~测试有效! 谢谢!




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