下面是我在usb中的批处理脚本Batch1.bat
setlocal enabledelayedexpansion
for /f "tokens=2delims=:" %%a in ('netsh wlan show profile ^|findstr ":"') do (set "ssid=%%~a" & call :getpwd "%%ssid:~1%%")
:getpwd
set "ssid=%*"
for /f "tokens=2delims=:" %%i in ('netsh wlan show profile name^="%ssid:"=%" key^=clear ^| findstr /C:"Key Content"') do echo ssid: %ssid% pass: %%i >> c:\Wifi.txt
我正在编写另一个批处理脚本,它使用echo编写上面的批处理脚本,如下所示:
@echo off
echo setlocal enabledelayedexpansion >>c:\batch2.txt
echo for /f "tokens=2delims=:" %%%%a in ('netsh wlan show profile ^^^|findstr ":"') do (set "ssid=%%%%~a" ^& call :getpwd "%%%%ssid:~1%%%%") >>c:\batch2.txt
echo set "ssid=%%*" >>c:\batch2.txt
echo for /f "tokens=2delims=:" %%%%i in ('netsh wlan show profile name^^="%%ssid:"=%%" key^=clear ^^^| findstr /C:"Key Content"') do echo ssid: %%ssid%% pass: %%%%i >> c:\Wifi.txt >>c:\batch2.txt
但是第五行并没有被呼应和书写。尝试过各种各样的逃跑。请大家帮忙。
echo for /f "tokens=2delims=:" %%%%i in ('netsh wlan show profile name^^="%%ssid:"=%%" key^=clear ^| findstr /C:"Key Content"') do echo ssid: %%ssid%% pass: %%%%i >> c:\Wifi.txt >>batch2.txt
pause
通常回显工作,但将其重定向到文件批2.txt不工作
也曾尝试过^>^> c:\Wifi.txt
但什么都没用
发布于 2022-07-09 19:37:12
由于多种原因,问题中批处理文件中的第五行无法按预期工作。但是,即使对Windows处理器cmd.exe
具有特殊意义的所有字符都将正确转义,命令行也不能工作,以便将命令行写入c:\batch2.txt
。
以下批处理文件代码可用于创建%Temp%\Batch2.cmd
@echo off
(
echo @echo off
echo setlocal EnableExtensions DisableDelayedExpansion
echo for /F "tokens=1* delims=:" %%%%G in ('%%SystemRoot%%\System32\netsh.exe wlan show profile 2^^^>nul ^^^| %%SystemRoot%%\System32\find.exe ":"'^) do for /F "tokens=*" %%%%I in ("%%%%H"^) do for /F "tokens=3*" %%%%J in ('%%SystemRoot%%\System32\netsh.exe wlan show profile name^^="%%%%I" key^^=clear ^^^| %%SystemRoot%%\System32\find.exe "Key Content"'^) do echo ssid: %%%%I pass: %%%%K^>^>"%~dp0\Wifi.txt"
echo del "%%~f0" ^& exit
) >"%Temp%\batch2.cmd"
endlocal
创建的批处理文件%Temp%\batch2.cmd
必须以本地管理员的提升权限运行,这很可能是该批处理文件应该创建多一个批处理文件的原因。
如果%Temp%\batch2.cmd
是包含上述批处理文件的目录,则创建的批处理文件C:\Temp
包含以下行:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "tokens=1* delims=:" %%G in ('%SystemRoot%\System32\netsh.exe wlan show profile 2^>nul ^| %SystemRoot%\System32\find.exe ":"') do for /F "tokens=*" %%I in ("%%H") do for /F "tokens=3*" %%J in ('%SystemRoot%\System32\netsh.exe wlan show profile name^="%%I" key^=clear ^| %SystemRoot%\System32\find.exe "Key Content"') do echo ssid: %%I pass: %%K>>"C:\Temp\Wifi.txt"
del "%~f0" & exit
该批处理文件为每个存储的WLAN获取SSID名称和WLAN密码,并将它们写入上述批处理文件目录(USB附加存储介质)中的文件Wifi.txt
中。第二个批处理文件使用最后一个命令行删除自身。该代码比问题中使用的代码要好得多,因为它甚至适用于包含感叹号的SSID名称或WLAN密码。
从批处理文件中再创建一个批处理文件只是为了作为管理员运行它是完全不需要的。实际上只需要一个批处理文件,如果没有在本地管理员的权限提升的环境中执行,则提示用户进行提升,然后运行命令行将感兴趣的WLAN数据写入文本文件。有关更多细节,请参见我在Can't run as Admin上的回答。
https://stackoverflow.com/questions/72921165
复制相似问题