首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理脚本,该脚本在代码中写入另一个具有for循环的批处理脚本。

批处理脚本,该脚本在代码中写入另一个具有for循环的批处理脚本。
EN

Stack Overflow用户
提问于 2022-07-09 11:57:23
回答 2查看 63关注 0票数 0

下面是我在usb中的批处理脚本Batch1.bat

代码语言:javascript
运行
复制
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编写上面的批处理脚本,如下所示:

代码语言:javascript
运行
复制
@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

但是第五行并没有被呼应和书写。尝试过各种各样的逃跑。请大家帮忙。

代码语言:javascript
运行
复制
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

但什么都没用

EN

Stack Overflow用户

发布于 2022-07-09 19:37:12

由于多种原因,问题中批处理文件中的第五行无法按预期工作。但是,即使对Windows处理器cmd.exe具有特殊意义的所有字符都将正确转义,命令行也不能工作,以便将命令行写入c:\batch2.txt

以下批处理文件代码可用于创建%Temp%\Batch2.cmd

代码语言:javascript
运行
复制
@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包含以下行:

代码语言:javascript
运行
复制
@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上的回答。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72921165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档