![](/img/trans.png)
[英]How to set variable from git command output using windows cmd/batch
[英]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标签,尽管您的问题是关于批处理文件,但您也可以直接在命令提示符(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.