标题: [网络连接] [不问了]如何修改多个MAC地址?关于十六进制循环加减 [打印本页]
作者: aries215 时间: 2024-8-30 22:12 标题: [不问了]如何修改多个MAC地址?关于十六进制循环加减
本帖最后由 aries215 于 2024-8-31 13:26 编辑
- for /f "tokens=*" %%i in ('reg query "HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}" /s /v /f "FlowControl" ^|findstr /i "{"') do (
- reg add "%%~i" /f /v "NetworkAddress" /t REG_SZ /d "A0B0C0D0E0F0" >nul
- )
复制代码
如今不少电脑都有2~4个网口,MAC地址也相应变多。上面代码会改为同一个MAC地址造成冲突,如何改为不同数值。
也就是for每循环一次就把A0B0C0D0E0F0位数增大1,即十六进制循环加减。
不用wmic命令,纯批实现,谢谢!
作者: Five66 时间: 2024-8-31 00:44
这样行不?只计算最后2个16进制位,256个网口以内- @echo off
-
- set _@@addr=A0B0C0D0E0F0
-
- set ___=□0□1□2□3□4□5□6□7□8□9□A□B□C□D□E□F
- setlocal enabledelayedexpansion
- set ___=!%___:□=!!___:□=□%!
- endlocal&set ___=%___:□=%
-
- set /a _@@a=0x%_@@addr:~-2%*2
-
- for /f "tokens=*" %%i in ('reg query "HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}" /s /v /f "FlowControl" ^|findstr /i "{"') do (
- setlocal enabledelayedexpansion
- if !_@@a! geq 512 set _@@a=0
- for %%q in ("!_@@a!") do (
- reg add "%%~i" /f /v "NetworkAddress" /t REG_SZ /d "%_@@addr:~0,10%!___:~%%~q,2!" >nul
- )
- for %%q in ("!_@@a!") do endlocal&set _@@a=%%~q
- set /a _@@a+=2
- )
复制代码
作者: aloha20200628 时间: 2024-8-31 12:08
本帖最后由 aloha20200628 于 2024-8-31 12:16 编辑
回复 1# aries215
一楼示例中的地址数值已超过批处整数极限,若楼主可用 powershell 试试以下代码...
- @echo off &setlocal enabledelayedexpansion
- set "ip=0xA0B0C0D0E0F0"
- for /f "tokens=*" %%i in (
- ' reg query "HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}" /s /v /f "FlowControl" ^|findstr /i "{" '
- ) do (
- reg add "%%~i" /f /v "NetworkAddress" /t REG_SZ /d "!ip!" >nul
- for /f %%p in (' powershell "(!ip!+1).ToString('x')" ') do set "ip=0x%%p"
- )
- endlocal&pause&exit/b
复制代码
作者: Five66 时间: 2024-8-31 12:21
如果只是为了不一样,其实没必要进行16进制的运行,直接找几个不一样的,将其中的替换掉就行了
例如直接将第一位按顺序替换成0,1,2,3,4,5,6,7,8,9。。。。。
作者: aries215 时间: 2024-8-31 13:20
回复 3# aloha20200628
感谢指出问题!主要是PE系统基本没有PS组件,只能纯批,只算最后两位或四位数也够。
作者: aries215 时间: 2024-8-31 13:25
本帖最后由 aries215 于 2024-9-1 12:10 编辑
回复 4# Five66
确实啊,我以为增加两三行就能解决,看了你们写的比我预想的复杂,那我干脆手工改改好了,毕竟电脑买来会用好多年。- reg add "HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0000" /f /v "NetworkAddress" /t REG_SZ /d "A0B0C0D0E0F0"
- reg add "HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0001" /f /v "NetworkAddress" /t REG_SZ /d "A0B0C0D0E0F1"
复制代码
作者: WHY 时间: 2024-8-31 13:34
- @echo off
- setlocal enabledelayedexpansion
- set "mac=A0B0C0D0E0F0"
- set "reg=HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}"
- set "str=0123456789ABCDEF"
-
- for /f "tokens=*" %%i in ('reg query "%reg%" /s /v /f "FlowControl" ^| findstr "{"') do (
- set "res="
- set /a x=n+=1
- for /L %%j in (1,1,12) do (
- set /a sum=0x!mac:~-%%j,1! + x, m=sum%%16, x=sum/16
- for %%k in (!m!) do (
- set "res=!str:~%%k,1!!res!"
- )
- )
- reg add "%%~i" /v "NetworkAddress" /d "!res!" /f
- )
- pause
复制代码
作者: WHY 时间: 2024-8-31 13:37
- @echo off
- setlocal enabledelayedexpansion
- set "mac=A0B0C0D0E0F0"
- set "reg=HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}"
-
- for /f "tokens=*" %%i in ('reg query "%reg%" /s /v /f "FlowControl" ^|findstr "{"') do (
- set /a n = 0x!mac:~6! + 1
- cmd /c exit /b !n!
- set "res=!=exitCode!"
- set /a n = 0x!mac:~0,6! + 0x!res:~0,2!
- cmd /c exit /b !n!
- set mac=!=exitCode:~2!!res:~2!
- reg add "%%~i" /v "NetworkAddress" /t REG_SZ /d "!mac!" /f
- )
- pause
复制代码
作者: WHY 时间: 2024-8-31 13:41
回复 6# aries215
16进制运算没你想像的那么简单。
作者: Five66 时间: 2024-8-31 14:25
回复 5# aries215
没有ps组件可以试试去下个lua,500多k的大小,基本语言功能该有的都有(可谓麻雀虽小五脏俱全),而且是二进制程序,速度比ps快好多好多倍
批处理文件直接用
lua -e "print(string.format('%%X',tostring((0xA0B0C0D0E0F0+1))))"
就能输出对应的16进制值了,将数据换成变量放进 for /f 里后使用就能达到目的了
作者: aloha20200628 时间: 2024-8-31 16:18
本帖最后由 aloha20200628 于 2024-8-31 16:44 编辑
回复 5# aries215
那就再给一个无须调用任何外部资源的纯P版本,从 0xD0E0F0 起算直至6位0x数封顶0xFFFFFF(在批处整数计算能力内),其结果再拼接成 0x0xA0B0C0...... 12位ip地址,代码中的子过程其实就是一个用纯P转换10进制为16进制字符串的方法(0-2147483647 》0-0x7FFFFFFF)
- @echo off &setlocal enabledelayedexpansion
- set "ip=0xA0B0C0D0E0F0" &set "x0=0xA0B0C0"
- set "w=HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}"
- for /f "tokens=*" %%i in (' reg query "%w%" /s /v /f "FlowControl" ^|findstr /i "{" ') do (
- reg add "%%~i" /f /v "NetworkAddress" /t REG_SZ /d "!ip!" >nul
- set/a "n=0x!ip:~-6!+1" &set "x=," & (call :xp16)
- )
- endlocal&exit/b
- :xp16
- set/a "r=n%%16,n=n/16" &set "x=,!r!!x!" &if !n! gtr 0 goto :xp16
- for %%k in ("10=A" "11=B" "12=C" "13=D" "14=E" "15=F") do set "x=!x:%%~k!"
- set "ip=!x0!!x:,=!" &exit/b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |