windowsbatch-filewindows-10mac-address

How can I create a batch file that changes my MAC address?


I recently learned how to change my MAC address thanks to https://superuser.com/questions/1514745/how-to-change-mac-address-on-windows-10-without-third-party-software/1544773 but I was wondering if I could implement this in a batch file. The registry key for my NIC is HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0011. I want to create a batch file that randomizes my MAC Address. You don't need to create the batch file for me (you can, I can't control you), but pointers would be really appreciated.

Thanks in advance,

Asian


Solution

  • Here is my code, I've done this before.

    @echo off
    dism >nul
    if %errorlevel% NEQ 0 goto Elevate
    (call )
    netsh interface set interface Wi-Fi disable
    timeout /t 1 /nobreak >null
    netsh interface set interface Wi-Fi enable
    choice /c RC /m "Would you like to randomize your MAC adress or customize it?"
    if %Errorlevel% EQU 2 goto custom
    set loopcount=5
    :loop
    set /a loopcount=loopcount-1
    if %loopcount% LEQ 0 (goto exitloop)
    set /a "ascii = %random% * 26 / 32768 + 65"
    cmd /c exit /b %ascii%
    set "rl1=%rl1%%=ExitCodeAscii%
    goto loop
    :exitloop
    set MAC="0E%random:~0,2%%rl1:~0,2%%random:~0,2%%rl1:~3,2%%rl1:~-1%%random:~0,1%"
    goto after
    :custom
    echo Format: AABBCCDDEEFF
    echo/
    set /p MAC="Input your MAC address here (no spaces or hyphens)> "
    :after
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0011" /v NetworkAddress /d %MAC% /f >null
    netsh interface set interface Wi-Fi disable
    timeout /t 1 /nobreak >null
    netsh interface set interface Wi-Fi enable
    echo Operation Successful
    echo %mac% is your new MAC address
    pause
    goto :eof
    :Elevate
    Echo Error: The requested operation requires elevation
    Echo Run file again as admin
    Echo Closing file in 10 seconds...
    timeout /t 10 /nobreak >nul
    goto :eof
    

    It sometimes requires a restart before doing it to work but it usually works fine.