[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] [已解决]批处理,连接wifi无线网,变量替换.xml文件中的ssid和密码?

本帖最后由 ygqiang 于 2025-1-9 06:54 编辑

批处理,连接wifi无线网,变量替换.xml文件中的ssid和密码?
代码运行后,可以正常连接wifi无线网。
  1. @echo off
  2. set "sidd=newifi"
  3. set "pass=abcd1234"
  4. (for /f "delims=" %%a in (%~fs0) do (
  5. if "%%a"=="<?xml version="1.0"?>" set f=1
  6. if defined f echo;%%a
  7. ))>"%~fs0.xml"
  8. netsh wlan add profile filename="%~fs0.xml"
  9. netsh wlan connect name=%sidd%
  10. del "%~fs0.xml"
  11. pause
  12. REM 等待几秒钟以确保连接成功
  13. timeout /t 10 /nobreak > nul
  14. REM 检查连接状态
  15. netsh wlan show interfaces | findstr /I /C:%sidd%
  16. if %errorlevel% equ 0 (
  17.     echo 成功连接到WiFi网络 %ssid%
  18. ) else (
  19.     echo 无法连接到WiFi网络 %ssid%
  20. )
  21. pause
  22. goto :eof
  23. <?xml version="1.0"?>
  24. <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
  25.         <name>newifi</name>
  26.         <SSIDConfig>
  27.                 <SSID>
  28.                         <name>newifi</name>
  29.                 </SSID>
  30.         </SSIDConfig>
  31.         <connectionType>ESS</connectionType>
  32.         <connectionMode>auto</connectionMode>
  33.         <MSM>
  34.                 <security>
  35.                         <authEncryption>
  36.                                 <authentication>WPA2PSK</authentication>
  37.                                 <encryption>AES</encryption>
  38.                                 <useOneX>false</useOneX>
  39.                         </authEncryption>
  40.                         <sharedKey>
  41.                                 <keyType>passPhrase</keyType>
  42.                                 <protected>false</protected>
  43.                                 <keyMaterial>abcd1234</keyMaterial>
  44.                         </sharedKey>
  45.                 </security>
  46.         </MSM>
  47.         <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
  48.                 <enableRandomization>false</enableRandomization>
  49.         </MacRandomization>
  50. </WLANProfile>
复制代码
遇到的主要问题如下:
下面的测试代码,生成的xml文件内容,变量本身%sidd%输出。而不是变量的值newifi输出。
如何修改代码,实现输出文件内容,将变量的值输出?
  1. @echo off
  2. set "sidd=newifi"
  3. (for /f "delims=" %%a in (%~fs0) do (
  4. if "%%a"=="<?xml version="1.0"?>" set f=1
  5. if defined f echo;%%a
  6. ))>"%~fs0.xml"
  7. pause
  8. <?xml version="1.0"?>
  9. <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
  10.         <name>%sidd%</name>
  11.         <SSIDConfig>
  12.                 <SSID>
  13.                         <name>%sidd%</name>
复制代码
生成的有问题的xml文件,内容如下:
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
        <name>^%sidd^%</name>
        <SSIDConfig>
                <SSID>
                        <name>%sidd%</name>

需要实现生成xml文件的效果如下:
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
        <name>newifi</name>
        <SSIDConfig>
                <SSID>
                        <name>newifi</name>
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aloha20200628 于 2025-1-9 15:05 编辑

回复 1# ygqiang

   如不在意采用 sed.exe(从本坛第三方下载落地即用,与本脚本文件同目录),可用以下版本来简化并提效批处代码》一行流完成自适应分割生成联网配置文件包括传入wifi密码实值...
   以下代码仅包含核心操作部分(仅供参考)
  1. @echo off &setlocal
  2. set "wiid=new11-2.4G"
  3. set "pass=kkkk8899"
  4. set "profile_name=%wiid%"
  5. ::生成联网配置文件包括传入%wiid%变量实值
  6. sed.exe -n "/^<?xml/,$p" "%~f0"|sed.exe "s/%%wiid%%/%wiid%/i">"%profile_name%.xml"
  7. ::连接指定的WiFi网络
  8. netsh wlan add profile filename="%profile_name%.xml"
  9. netsh wlan connect name="%profile_name%" ssid="%wiid%"
  10. REM 等待几秒钟以确保连接成功
  11. timeout /t 10 /nobreak > nul
  12. REM 检查连接状态
  13. netsh wlan show interfaces | findstr /I /C:"%wiid%"
  14. if %errorlevel% equ 0 (
  15.     echo 成功连接到WiFi网络 %wiid%
  16. ) else (
  17.     echo 无法连接到WiFi网络 %wiid%
  18. )
  19. pause&exit/b
  20. ::以下配置文件内容被简化
  21. <?xml version="1.0"?>
  22. ...
  23. <SSID>
  24. <name>%wiid%</name>
  25. </SSID>
  26. ...
  27. </WLANProfile>
复制代码

TOP

本帖最后由 ygqiang 于 2025-1-9 01:15 编辑

回复 8# 77七


    谢谢。最终代码如下。
  1. @echo off & setlocal enabledelayedexpansion
  2. echo 代码开始
  3. @echo off
  4. REM 定义WiFi的SSID和密码
  5. set "wiid=new11-2.4G"
  6. set "pass=kkkk8899"
  7. set "profile_name=%wiid%"
  8. (for /f "delims=:" %%i in ('findstr /n "^:del-dir$" "%~f0"') do (
  9. for /f "delims=" %%a in ('more +%%i "%~f0"') do (
  10. for /f "delims=" %%b in ('echo "%%a"') do (
  11. echo %%~b
  12. )
  13. )
  14. )) > %profile_name%.xml
  15. 1pause
  16. cls
  17. REM 添加WiFi配置文件
  18.     netsh wlan add profile filename="%profile_name%.xml"
  19.     if %errorlevel% neq 0 (
  20.         echo 无法创建配置文件 %profile_name%
  21.         exit /b 1
  22.     )
  23. ) else (
  24.     echo 配置文件 %profile_name% 已存在。
  25. )
  26. REM 连接到指定WiFi网络
  27. echo 正在连接到WiFi网络 %ssid%...
  28. netsh wlan connect name="%profile_name%" ssid="%wiid%"
  29. REM 等待几秒钟以确保连接成功
  30. timeout /t 10 /nobreak > nul
  31. REM 检查连接状态
  32. netsh wlan show interfaces | findstr /I /C:"%wiid%"
  33. if %errorlevel% equ 0 (
  34.     echo 成功连接到WiFi网络 %ssid%
  35. ) else (
  36.     echo 无法连接到WiFi网络 %ssid%
  37. )
  38. pause >nul
  39. exit
  40. ———————————————————————
  41. :del-dir
  42. <?xml version="1.0"?>
  43. <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
  44.         <name>%wiid%</name>
  45.         <SSIDConfig>
  46.                 <SSID>
  47.                         <name>%wiid%</name>
  48.                 </SSID>
  49.         </SSIDConfig>
  50.         <connectionType>ESS</connectionType>
  51.         <connectionMode>auto</connectionMode>
  52.         <MSM>
  53.                 <security>
  54.                         <authEncryption>
  55.                                 <authentication>WPA2PSK</authentication>
  56.                                 <encryption>AES</encryption>
  57.                                 <useOneX>false</useOneX>
  58.                         </authEncryption>
  59.                         <sharedKey>
  60.                                 <keyType>passPhrase</keyType>
  61.                                 <protected>false</protected>
  62.                                 <keyMaterial>%pass%</keyMaterial>
  63.                         </sharedKey>
  64.                 </security>
  65.         </MSM>
  66.         <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
  67.                 <enableRandomization>false</enableRandomization>
  68.         </MacRandomization>
  69. </WLANProfile>
复制代码

TOP

回复 6# ygqiang


  
  1. @echo off
  2. set "sidd=new11-2.4G"
  3. set "pass=kkkk8899"
  4. (for /f "delims=:" %%i in ('findstr /n "^:del-dir$" "%~f0"') do (
  5. for /f "delims=" %%a in ('more +%%i "%~f0"') do (
  6. for /f "delims=" %%b in ('echo "%%a"') do (
  7. echo %%~b
  8. )
  9. )
  10. )) > "%~dpn0.xml"
  11. pause
  12. ———————————————————————
  13. :del-dir
  14. <?xml version="1.0"?>
  15. <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
  16.         <name>%sidd%</name>
  17.         <SSIDConfig>
  18.                 <SSID>
  19.                         <name>%sidd%</name>
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 6# ygqiang


   一般不需要频繁修改吧...也可以留够足够多的空行,比如skip=100,xml正文写在200行,简单修改代码不会影响。或者就依照个人习惯好了。
bat小白,请多指教!谢谢!

TOP

本帖最后由 ygqiang 于 2025-1-9 00:32 编辑

回复 5# 77七


    skip=12
感觉这个参数是不是会造成代码不通用?

下面代码,如何修改,可以实现将变量的值,输出到xml文件?
  1. @echo off
  2. set "sidd=new11-2.4G"
  3. set "pass=kkkk8899"
  4. for /f "delims=:" %%i in ('findstr /n "^:del-dir$" "%~f0"') do (
  5.     more +%%i "%~f0" >"%~fs0.xml"
  6. )
  7. pause
  8. ———————————————————————
  9. :del-dir
  10. <?xml version="1.0"?>
  11. <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
  12.         <name>%sidd%</name>
  13.         <SSIDConfig>
  14.                 <SSID>
  15.                         <name>%sidd%</name>
  16.                 </SSID>
  17.         </SSIDConfig>
  18.         <connectionType>ESS</connectionType>
  19.         <connectionMode>auto</connectionMode>
  20.         <MSM>
  21.                 <security>
  22.                         <authEncryption>
  23.                                 <authentication>WPA2PSK</authentication>
  24.                                 <encryption>AES</encryption>
  25.                                 <useOneX>false</useOneX>
  26.                         </authEncryption>
  27.                         <sharedKey>
  28.                                 <keyType>passPhrase</keyType>
  29.                                 <protected>false</protected>
  30.                                 <keyMaterial>%pass%</keyMaterial>
  31.                         </sharedKey>
  32.                 </security>
  33.         </MSM>
  34.         <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
  35.                 <enableRandomization>false</enableRandomization>
  36.         </MacRandomization>
  37. </WLANProfile>
复制代码

TOP

回复 4# ygqiang


  注意看下3楼代码下方的内容,两次扩展后达到需求。
bat小白,请多指教!谢谢!

TOP

本帖最后由 ygqiang 于 2025-1-9 00:23 编辑

回复 3# 77七



谢谢。1楼更新了问题描述。

TOP

  1. @echo off
  2. set "sidd=newifi"
  3. set "pass=abcd1234"
  4. for /f "useback skip=12 delims=" %%a in ("%~f0") do (
  5. for /f "delims=" %%i in ('echo "%%a"') do (
  6. echo %%~i
  7. )
  8. )
  9. pause
  10. ...
  11. ...
  12.         <name>%sidd%</name>
  13. ...
  14.                                 <keyMaterial>%pass%</keyMaterial>
  15. ...
复制代码
bat小白,请多指教!谢谢!

TOP

如果直接用bat里面的变量%sidd%和%pass%,
替换.xml文件中的ssid(newifi)和密码(abcd1234)
bat运行提示有错误,不能直接连接wifi无线网络。

TOP

返回列表