标题: [网络连接] [已解决]批处理,连接wifi无线网,变量替换.xml文件中的ssid和密码? [打印本页]
作者: ygqiang 时间: 2025-1-8 22:17 标题: [已解决]批处理,连接wifi无线网,变量替换.xml文件中的ssid和密码?
本帖最后由 ygqiang 于 2025-1-9 06:54 编辑
批处理,连接wifi无线网,变量替换.xml文件中的ssid和密码?
代码运行后,可以正常连接wifi无线网。- @echo off
-
- set "sidd=newifi"
- set "pass=abcd1234"
-
-
- (for /f "delims=" %%a in (%~fs0) do (
- if "%%a"=="<?xml version="1.0"?>" set f=1
- if defined f echo;%%a
- ))>"%~fs0.xml"
- netsh wlan add profile filename="%~fs0.xml"
- netsh wlan connect name=%sidd%
- del "%~fs0.xml"
- pause
-
- REM 等待几秒钟以确保连接成功
- timeout /t 10 /nobreak > nul
- REM 检查连接状态
- netsh wlan show interfaces | findstr /I /C:%sidd%
- if %errorlevel% equ 0 (
- echo 成功连接到WiFi网络 %ssid%
- ) else (
- echo 无法连接到WiFi网络 %ssid%
- )
-
- pause
-
- goto :eof
-
-
- <?xml version="1.0"?>
- <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
- <name>newifi</name>
- <SSIDConfig>
- <SSID>
- <name>newifi</name>
- </SSID>
- </SSIDConfig>
- <connectionType>ESS</connectionType>
- <connectionMode>auto</connectionMode>
- <MSM>
- <security>
- <authEncryption>
- <authentication>WPA2PSK</authentication>
- <encryption>AES</encryption>
- <useOneX>false</useOneX>
- </authEncryption>
- <sharedKey>
- <keyType>passPhrase</keyType>
- <protected>false</protected>
- <keyMaterial>abcd1234</keyMaterial>
- </sharedKey>
- </security>
- </MSM>
- <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
- <enableRandomization>false</enableRandomization>
- </MacRandomization>
- </WLANProfile>
复制代码
遇到的主要问题如下:
下面的测试代码,生成的xml文件内容,变量本身%sidd%输出。而不是变量的值newifi输出。
如何修改代码,实现输出文件内容,将变量的值输出?
- @echo off
-
- set "sidd=newifi"
-
-
- (for /f "delims=" %%a in (%~fs0) do (
- if "%%a"=="<?xml version="1.0"?>" set f=1
- if defined f echo;%%a
- ))>"%~fs0.xml"
- pause
-
- <?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>^%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>
作者: ygqiang 时间: 2025-1-8 22:22
如果直接用bat里面的变量%sidd%和%pass%,
替换.xml文件中的ssid(newifi)和密码(abcd1234)
bat运行提示有错误,不能直接连接wifi无线网络。
作者: 77七 时间: 2025-1-8 23:09
- @echo off
- set "sidd=newifi"
- set "pass=abcd1234"
-
- for /f "useback skip=12 delims=" %%a in ("%~f0") do (
- for /f "delims=" %%i in ('echo "%%a"') do (
- echo %%~i
- )
- )
- pause
- ...
-
- ...
- <name>%sidd%</name>
- ...
- <keyMaterial>%pass%</keyMaterial>
- ...
复制代码
作者: ygqiang 时间: 2025-1-9 00:12
本帖最后由 ygqiang 于 2025-1-9 00:23 编辑
回复 3# 77七
谢谢。1楼更新了问题描述。
作者: 77七 时间: 2025-1-9 00:23
回复 4# ygqiang
注意看下3楼代码下方的内容,两次扩展后达到需求。
作者: ygqiang 时间: 2025-1-9 00:24
本帖最后由 ygqiang 于 2025-1-9 00:32 编辑
回复 5# 77七
skip=12
感觉这个参数是不是会造成代码不通用?
下面代码,如何修改,可以实现将变量的值,输出到xml文件?- @echo off
-
- set "sidd=new11-2.4G"
- set "pass=kkkk8899"
-
-
- for /f "delims=:" %%i in ('findstr /n "^:del-dir$" "%~f0"') do (
- more +%%i "%~f0" >"%~fs0.xml"
- )
-
-
-
-
- pause
-
-
-
- ———————————————————————
- :del-dir
- <?xml version="1.0"?>
- <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
- <name>%sidd%</name>
- <SSIDConfig>
- <SSID>
- <name>%sidd%</name>
- </SSID>
- </SSIDConfig>
- <connectionType>ESS</connectionType>
- <connectionMode>auto</connectionMode>
- <MSM>
- <security>
- <authEncryption>
- <authentication>WPA2PSK</authentication>
- <encryption>AES</encryption>
- <useOneX>false</useOneX>
- </authEncryption>
- <sharedKey>
- <keyType>passPhrase</keyType>
- <protected>false</protected>
- <keyMaterial>%pass%</keyMaterial>
- </sharedKey>
- </security>
- </MSM>
- <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
- <enableRandomization>false</enableRandomization>
- </MacRandomization>
- </WLANProfile>
复制代码
作者: 77七 时间: 2025-1-9 00:36
回复 6# ygqiang
一般不需要频繁修改吧...也可以留够足够多的空行,比如skip=100,xml正文写在200行,简单修改代码不会影响。或者就依照个人习惯好了。
作者: 77七 时间: 2025-1-9 00:40
回复 6# ygqiang
- @echo off
-
- set "sidd=new11-2.4G"
- set "pass=kkkk8899"
-
-
- (for /f "delims=:" %%i in ('findstr /n "^:del-dir$" "%~f0"') do (
- for /f "delims=" %%a in ('more +%%i "%~f0"') do (
- for /f "delims=" %%b in ('echo "%%a"') do (
- echo %%~b
- )
- )
- )) > "%~dpn0.xml"
-
-
-
-
- pause
-
-
-
- ———————————————————————
- :del-dir
- <?xml version="1.0"?>
- <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
- <name>%sidd%</name>
- <SSIDConfig>
- <SSID>
- <name>%sidd%</name>
复制代码
作者: ygqiang 时间: 2025-1-9 01:00
本帖最后由 ygqiang 于 2025-1-9 01:15 编辑
回复 8# 77七
谢谢。最终代码如下。- @echo off & setlocal enabledelayedexpansion
- echo 代码开始
-
- @echo off
- REM 定义WiFi的SSID和密码
-
- set "wiid=new11-2.4G"
- set "pass=kkkk8899"
- set "profile_name=%wiid%"
-
-
- (for /f "delims=:" %%i in ('findstr /n "^:del-dir$" "%~f0"') do (
- for /f "delims=" %%a in ('more +%%i "%~f0"') do (
- for /f "delims=" %%b in ('echo "%%a"') do (
- echo %%~b
- )
- )
- )) > %profile_name%.xml
-
- 1pause
- cls
-
- REM 添加WiFi配置文件
- netsh wlan add profile filename="%profile_name%.xml"
- if %errorlevel% neq 0 (
- echo 无法创建配置文件 %profile_name%
- exit /b 1
- )
- ) else (
- echo 配置文件 %profile_name% 已存在。
- )
-
- REM 连接到指定WiFi网络
- echo 正在连接到WiFi网络 %ssid%...
- netsh wlan connect name="%profile_name%" ssid="%wiid%"
-
-
- REM 等待几秒钟以确保连接成功
- timeout /t 10 /nobreak > nul
-
- REM 检查连接状态
- netsh wlan show interfaces | findstr /I /C:"%wiid%"
- if %errorlevel% equ 0 (
- echo 成功连接到WiFi网络 %ssid%
- ) else (
- echo 无法连接到WiFi网络 %ssid%
- )
-
- pause >nul
- exit
-
-
- ———————————————————————
- :del-dir
- <?xml version="1.0"?>
- <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
- <name>%wiid%</name>
- <SSIDConfig>
- <SSID>
- <name>%wiid%</name>
- </SSID>
- </SSIDConfig>
- <connectionType>ESS</connectionType>
- <connectionMode>auto</connectionMode>
- <MSM>
- <security>
- <authEncryption>
- <authentication>WPA2PSK</authentication>
- <encryption>AES</encryption>
- <useOneX>false</useOneX>
- </authEncryption>
- <sharedKey>
- <keyType>passPhrase</keyType>
- <protected>false</protected>
- <keyMaterial>%pass%</keyMaterial>
- </sharedKey>
- </security>
- </MSM>
- <MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
- <enableRandomization>false</enableRandomization>
- </MacRandomization>
- </WLANProfile>
复制代码
作者: aloha20200628 时间: 2025-1-9 14:54
本帖最后由 aloha20200628 于 2025-1-9 15:05 编辑
回复 1# ygqiang
如不在意采用 sed.exe(从本坛第三方下载落地即用,与本脚本文件同目录),可用以下版本来简化并提效批处代码》一行流完成自适应分割生成联网配置文件包括传入wifi密码实值...
以下代码仅包含核心操作部分(仅供参考)- @echo off &setlocal
- set "wiid=new11-2.4G"
- set "pass=kkkk8899"
- set "profile_name=%wiid%"
- ::生成联网配置文件包括传入%wiid%变量实值
- sed.exe -n "/^<?xml/,$p" "%~f0"|sed.exe "s/%%wiid%%/%wiid%/i">"%profile_name%.xml"
- ::连接指定的WiFi网络
- netsh wlan add profile filename="%profile_name%.xml"
- netsh wlan connect name="%profile_name%" ssid="%wiid%"
- REM 等待几秒钟以确保连接成功
- timeout /t 10 /nobreak > nul
- REM 检查连接状态
- netsh wlan show interfaces | findstr /I /C:"%wiid%"
- if %errorlevel% equ 0 (
- echo 成功连接到WiFi网络 %wiid%
- ) else (
- echo 无法连接到WiFi网络 %wiid%
- )
- pause&exit/b
- ::以下配置文件内容被简化
- <?xml version="1.0"?>
- ...
- <SSID>
- <name>%wiid%</name>
- </SSID>
- ...
- </WLANProfile>
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |