Сохранение вывода команды в переменную не работает - PullRequest
0 голосов
/ 04 апреля 2019

Я хотел бы создать простой скрипт для отображения пароля WLAN на Windows10.Это будет хорошим решением для пользователей, которые не знакомы с командами cmd.

В Windows 7 это можно сделать с помощью графического интерфейса, но не в новых ОС.

Я застрял в строке

for /f "tokens=*" %%j in ('netsh wlan show profile %ssid% key=clear ^| findstr "Key Content"') do set wlan_password=%%j

Переменная wlan_password всегда равна нулю.Даже если я изменю инструкцию set, например, echo, это показывает, что синтаксис неверенЯ не могу устранить это.

Почему вышеприведенная строка не работает, а строка:

for /f "tokens=*" %%i in ('netsh wlan show interfaces ^| findstr "Profile"') do set wlan_output=%%i

работает хорошо?

@echo off
set wlan_output=
set connected_ssid=
set ssid=
set wlan_password=
for /f "tokens=*" %%i in ('netsh wlan show interfaces ^| findstr "Profile"') do set wlan_output=%%i
for /f "tokens=2 delims=:" %%a in ("%wlan_output%") do set connected_ssid=%%a
call :TRIM %connected_ssid% connected_ssid
set ssid=%1
if "%ssid%"=="" set /p "ssid=Podaj nazwe sieci [%connected_ssid%]: " || set "ssid=%connected_ssid%"
if not "%ssid%"=="" (
    for /f "tokens=*" %%j in ('netsh wlan show profile %ssid% key=clear ^| findstr "Key Content"') do set wlan_password=%%j

    echo "Haslo do sieci %ssid%: %wlan_password%"
    exit /b
)
else (
    echo "Nie podano nazwy sieci. Nie mozna odczytac hasla"
    exit /b
)
pause

exit /b
:TRIM
SET %2=%1
GOTO :EOF

1 Ответ

0 голосов
/ 05 апреля 2019

Тьфу - извините, что раньше не обнаружил настоящую проблему: вам также нужно экранировать = в команде for:

for /f "tokens=*" %%j in ('netsh wlan show profile %ssid% key^=clear ^| findstr /c:"Key Content"') do set wlan_password=%%j
set wlan_password

Примечание: используйте findstr /c:"Key Content" или find "Key Content", потому что findstr "Key Content" возвращает каждую строку, содержащую Key ИЛИ Content (или обе). (Не то чтобы это имело какое-либо значение в этом особом случае, но без /c: оно рано или поздно укусит вас)

Чтобы получить только ключ:

for /f "tokens=1,* delims=:" %%j in ('netsh wlan show profile %ssid% key^=clear ^| find "Key Content"') do set "wlan_password=%%k"
set "wlan_password=%wlan_password:~1%"
echo ---%wlan_password%---
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...