将命令输出保存到变量不起作用

时间:2019-04-03 21:07:17

标签: windows batch-file cmd

我想创建一个简单的脚本来在Windows10上显示wlan密码。 对于不熟悉cmd命令的用户来说,这将是一个很好的解决方案。

在Windows 7上,可以使用GUI来完成,但不能在较新的OS上完成。

我坚持在线

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

变量wlan_password始终为null。即使我将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 :(得分:0)

嗯-很抱歉未能尽快发现实际问题:您还必须在=命令中转义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"返回包含KeyContent(或两者)的每一行。 (并不是在这种特殊情况下会有所不同,但是如果没有/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%---