簡體   English   中英

如何將 CMD 批處理命令輸出的特定部分設置為變量? 或者,只是回應它?

[英]How do you set a specific part of the output of a CMD batch command as a variable? or alternatively, just echo it?

我正在編寫一個簡單的小批處理文件,用於獲取已保存的 Wi-Fi 網絡的密碼,但我想獲取關鍵內容,然后自行粘貼。 這是當前的代碼:

@echo off
set /p name=Enter Wi-Fi Name:
cls
echo %name%
netsh wlan show profile name="%name%" key=clear 
cmd /k

這給了我一長串數據,但我正在尋找的行是“關鍵內容”行。 我本質上想要做的是抓住“關鍵內容”行,清除所有行,然后回顯“關鍵內容”行。 在 Windows 11 上沒有任何插件,這可能嗎?

順便說一句,我是該網站的新手,並且作為一個整體進行編碼,所以對您來說似乎完全顯而易見的事情是我有 95% 的機會不知道的事情。 謝謝!

這是一個片段,基於您已收到並正確驗證最終用戶輸入:

@For /F "Tokens=1,* Delims=:" %%H In ('
 %SystemRoot%\System32\netsh.exe WLAN Show Profiles Name^="%name%" Key^=Clear
 2^>NUL ^| %SystemRoot%\System32\findstr.exe /RIC:"^[ ][ ]*Key Content[ ][ ]*: "
') Do @(Set "}=%%I" & SetLocal EnableDelayedExpansion
    For %%J In ("!}:~1!") Do @EndLocal & Echo(%%J)

您應該始終對任何最終用戶輸入執行穩健驗證,尤其是在使用Set /P命令時,該命令可以不接受任何內容或絕對接受任何內容(包括惡意內容) 如果目標系統是 Windows 8 / Server 2012 或更高版本,那么我不會浪費時間讓最終用戶自行確定無線配置文件名稱,然后在提示下正確鍵入。 我只是輸出所有的配置文件名稱,以及它們返回的鍵。

以下示例未經測試,假設您的“密碼”不包含雙引號字符。 他們應該以類似 CSV 的格式提供輸出, ("ProfileName","Password")

@For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe
 /NameSpace:\\Root\StandardCimv2 Path MSFT_NetConnectionProfile Get Name
 /Format:MOF 2^>NUL') Do @For /F "Tokens=1,* Delims=:" %%H In ('
 %SystemRoot%\System32\netsh.exe WLAN Show Profiles Name^="%%G" Key^=Clear
 2^>NUL ^| %SystemRoot%\System32\findstr.exe /RIC:"^[ ][ ]*Key Content[ ][ ]*: "
') Do @(Set "}=%%I" & SetLocal EnableDelayedExpansion
    For %%J In ("!}:~1!") Do @EndLocal & Echo("%%G",%%J)
@Pause

由於您似乎使用了標簽,盡管您的問題是關於,但您也可以直接在命令提示符(cmd.exe)中執行類似的操作:

For /F Tokens^=6^ Delims^=^" %G In ('%SystemRoot%\System32\wbem\WMIC.exe /NameSpace:\\Root\StandardCimv2 Path MSFT_NetConnectionProfile Get Name /Format:MOF 2^>NUL') Do @For /F "Tokens=1,* Delims=:" %H In ('"%SystemRoot%\System32\netsh.exe WLAN Show Profiles Name="%G" Key=Clear 2>NUL | %SystemRoot%\System32\findstr.exe /RIC:"^[ ][ ]*Key Content[ ][ ]*: ""') Do @Set "}=%I" & For /F Delims^=^ EOL^= %J In ('%SystemRoot%\System32\cmd.exe /V /D /C "Echo "%G","!}:~1!""') Do @(Set /P ="%J") 0<NUL & Echo(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM