繁体   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