此腳本的目標是顯示計算機保存的網路中的每個 WiFi 設備及其密鑰。
預期輸出:
<device_name1> : <key>
<device_name2> : <key>
<device_name3> : <key>
<device_name4> : <key>
這是當前腳本:(它只顯示設備和鍵的前 4 個字符)
@echo off
setlocal EnableDelayedExpansion
goto :main
:getKey
for /F "tokens=2 delims=: usebackq" %%B in (`netsh wlan show profiles name=%1 key=clear ^| find "Key Content"`) do (
set _clear_key=%%B
)
goto :eof
:main
for /F "tokens=2 delims=:" %%A in ('netsh wlan show profiles ^| find "User Profile"') do (
set _profile_name=%%A
set _profile_name=!_profile_name%:~1!
set _clear_key=aaaaaaa
call :getKey !_profile_name!
echo !_profile_name%:~0,4! : !_clear_key%:~0,4!
)
pause
goto :eof
電流輸出:
Free : aaaa
TP-L : aaaa
Bbox : aaaa
...
我猜該變數未在命令中正確應用,并且沒有任何回圈。但是,我已經將此語法用于其他腳本,它應該可以作業。
我很迷茫尋找為什么這不起作用T^T
- 該命令
netsh wlan show profiles name=!_profile_name! key=clear | find "Key Content"在第一個回圈內作業,但我無法與密鑰互動(下面的示例)
Free :
Key Content : v6v...
TP-L :
Key Content : 844...
Bbox :
Key Content : 7pf...
...
(使用的腳本)
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=2 delims=:" %%A in ('netsh wlan show profiles ^| find "User Profile"') do (
set _profile_name=%%A
set _profile_name=!_profile_name%:~1!
echo !_profile_name%:~0,4! :
netsh wlan show profiles name=!_profile_name! key=clear | find "Key Content"
)
pause
- 對于“for /F”回圈(和其他選項),我已經嘗試過使用和不使用 usebackq
- 與
:getKey第一個回圈內的部分相同 - 使用和不使用 EnableDelayedExpansion 時相同(并使用 %var%、!var!、%1、%%B、%%K、...)
我希望我不只是犯了一個愚蠢的錯誤。這個專案并不重要,所以請不要花費/浪費太多時間來解決我的問題。
uj5u.com熱心網友回復:
感謝@Hackoo 在我原始問題的評論中解決了我的問題。
我只是沒有逃避=命令中的netsh wlan show profiles name=%1 key=clear ^| find "Key Content"
如果有人想要,這是最終腳本:
@echo off
setlocal EnableDelayedExpansion
goto :main
:getKey
for /F "tokens=2 delims=: usebackq" %%B in (`netsh wlan show profiles %1 key^=clear ^| find "Key Content"`) do (
set _clear_key=%%B
set _clear_key=!_clear_key:~1!
)
goto :eof
:main
for /F "tokens=2 delims=:" %%A in ('netsh wlan show profiles ^| find "User Profile"') do (
set _profile_name=%%A
set _profile_name=!_profile_name:~1!
set _clear_key=No password
call :getKey !_profile_name!
echo !_profile_name:~0! : !_clear_key:~0!
)
pause
exit /b
uj5u.com熱心網友回復:
以下批處理檔案代碼可用于獲取 WLAN 密鑰:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "tokens=1* delims=:" %%G in ('%SystemRoot%\System32\netsh.exe wlan show profiles 2^>nul ^| %SystemRoot%\System32\find.exe "User Profile"') do for /F "tokens=*" %%I in ("%%H") do for /F "tokens=1* delims=:" %%J in ('%SystemRoot%\System32\netsh.exe wlan show profiles name^="%%I" key^=clear ^| %SystemRoot%\System32\find.exe "Key Content"') do for /F "tokens=*" %%L in ("%%K") do echo Key for wlan %%I is: %%L
endlocal
cmd如果不在雙引號引數字串中,則用FOR集中的普通空格替換所有逗號、分號、等號和不間斷空格。出于這個原因,也有必要在第三組FOR中轉義所有等號,以^按字面意思解釋它們。此代碼甚至適用于包含空格、冒號或感嘆號的 wlan 網路名稱和安全密鑰。
要了解所使用的命令及其作業原理,請打開命令提示符視窗,在其中執行以下命令,并仔細閱讀每個命令顯示的所有幫助頁面。
echo /?endlocal /?find /?for /?netsh /?netsh wlan /?netsh wlan show /?netsh wlan show profiles /?setlocal /?
閱讀有關使用命令重定向運算子2>nul的 Microsoft 檔案,了解和的說明|。當 Windows 命令解釋器在執行命令FOR之前處理此命令列時,重定向運算子>和|必須^在FOR命令列上使用脫字符進行轉義以解釋為文字字符, FOR在后臺啟動的單獨命令列程中執行嵌入式命令行作為附加引數附加的行內。%SystemRoot%\System32\cmd.exe /c'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462613.html
