windows 批处理从txt中读取带有特殊字符的字符串

siotufzp  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(138)

我正在尝试获取所有已知的WiFi SSID,包括密码。
当我使用下面的脚本时,我不能让它在双引号中设置SSID,(所以空格等是正确使用的)。
另外,当我有特殊字符,如感叹号,他们消失。
有人能帮帮我吗

@ECHO OFF
setlocal EnableExtensions DisableDelayedExpansion
color 02
netsh wlan show profiles | findstr /R /C:"[ ]:[ ]" > temp.txt
echo @echo off >> helper.bat
echo setlocal enabledelayedexpansion >> helper.bat
echo for /f "tokens=5*" %%%%i in (temp.txt) do ( set val=%%%%i %%%%j >> helper.bat
echo if "!val:~-1!" == " " set val=!val:~2,-1! >> helper.bat
echo echo !val! ^>^> final.txt) >> helper.bat
echo for /f "tokens=*" %%%%i in (final.txt) do @echo SSID: %%%%i ^>^> others_%computername%.txt ^& echo # ================================================ ^>^> others_%computername%.txt ^& netsh wlan show profiles name=%%%%i key=clear ^| findstr /N /R /C:"[ ]:[ ]" ^| findstr 33 ^>^> others_%computername%.txt ^& echo # ================================================ ^>^> others_%computername%.txt ^& echo # Key content is the password of your target SSID. ^>^> others_%computername%.txt ^& echo # ================================================ ^>^> others_%computername%.txt >> helper.bat
REM echo del /f /q temp.txt final.txt >> helper.bat
echo exit >> helper.bat
start "" /wait helper.bat
exit

字符串
输出例如:原始(temp.txt):

Profil fr alle Benutzer : 1FRITZ!Box Fon WLAN 7390


final.txt中的输出:

1FRITZBox Fon WLAN 7390


在final.txt中应该是什么样子:

"1FRITZ!Box Fon WLAN 7390"

4si2a6ki

4si2a6ki1#

这里是你的原始代码,删除了不必要的东西,修复和改进。它不再写入额外的文件或定义变量。这应该意味着echo对某些字符的作用不会影响输出,因此密码短语双引号是不必要的。

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
(
    For /F "Tokens=4,*" %%G In (
        '%SystemRoot%\System32\netsh.exe WLAN Show Profiles
         ^| %SystemRoot%\System32\findstr.exe /R "\<:\>"'
    ) Do (
        Echo Profile: %%H
        Echo # ======================================================
        %SystemRoot%\System32\netsh.exe WLAN Show Profiles Name="%%H" Key=Clear^
         | %SystemRoot%\System32\findstr.exe /N /R "\<:\>"^
         | %SystemRoot%\System32\findstr.exe /R "^33:"
        Echo # ======================================================
        Echo # Key content is the passphrase for your target Profile.
        Echo # ======================================================
    )
) 1>"others_%ComputerName%.txt"

字符串

  • 请注意 *,我不建议其他人使用这种方法,因为需要证明netsh.exe总是在所有系统的同一行上输出目标字符串。

相关问题