Как найти сохранённые пароли WIFI сетей с помощью .bat файла

Есть код который ищет все профили, перебирает их, а потом для каждого ищет пароль.

@echo off
setlocal enabledelayedexpansion

for /F "tokens=2 delims=:" %%a in ('netsh wlan show profile') do (
    set wifi_pwd=
    for /F "tokens=2 delims=: usebackq" %%F IN (`netsh wlan show profile %%a key^=clear ^| find "Содержимое ключа            :"`) do (
        set wifi_pwd=%%F
    )
    echo %%a : !wifi_pwd! 
)
pause

Но он срабатывает не во всех случаях из-за того, что во многих именах вайфай содержатся пробелы, поэтому когда этот профиль записывается в командную строку он не работает. Я пробовал изменить: (netsh wlan show profile name="%%a" ...) но оно вообще переставало показывать пароли.

А также, нужно чтобы после завершения поиска все данные записывались в txt файл, например wlan_passwords.txt


Ответы (1 шт):

Автор решения: Nikita

Проблема была в пробеле, который идет после двоеточия в выводе команды.

Вот доработанный код:

@echo off
chcp 1251 > nul
setlocal EnableExtensions, EnableDelayedExpansion

set nextStr=0

for /f "tokens=1,2 skip=2 delims=:" %%i in ('netsh wlan show profile') do (
    if !nextStr!==2 (
        set "name=%%j"
        set "name=!name:~1!"
        for /f "tokens=1,2 delims=:" %%k in ('netsh wlan show profile "!name!" key^=clear ^| find "Содержимое ключа"') do (
            set "key=%%l"
            set "key=!key:~1!"
            echo !name! : !key! >> wlan_passwords.txt
        )
    )
    if !nextStr!==1 set nextStr=2
    if "%%i"=="Профили пользователей" set nextStr=1
)

endlocal
exit /b

Сохранять нужно обязательно в кодировке Windows-1251, иначе не сработает.

→ Ссылка