在 /f netsh wlan show interface 前后抑制 space

Suppress space before and after for /f netsh wlan show interface

好的,所以下面的脚本删除了前后的空格,现在可以使用了。我相信有更好的方法来写这个。

    setlocal enableextensions enabledelayedexpansion
    for /f "tokens=1-2 delims=:" %a in ('netsh wlan show interface^|find "Name"') do (echo %b >> c:\temp\WLANINT.txt)
    for /f "delims=" %x in (c:\temp\WLANINT.txt) do SET WLANINT=%x
    :SpaceX
    echo "%WLANINT%"
    IF "%WLANINT:~0,1%"==" " (SET WLANINT=%WLANINT:~1,-1%)
    echo "%WLANINT%"
    IF "%WLANINT:~0,1%"==" " GOTO SpaceX
    echo "%WLANINT%"
    for /l %a in (1,1,100) do if "!WLANINT:~-1!"==" " set WLANINT=!WLANINT:~0,-1!
    echo."%WLANINT%"
    netsh wlan set profileorder name="%WIFI%" interface="%WLANINT%" priority=1
    echo "%WLANINT%"

尝试下一个代码片段(保存为 31194241.bat;运行 它可能需要管理权限):

@ECHO OFF >NUL
SETLOCAL enableextensions
for /f "tokens=1,* delims=:" %%a in ('
    netsh wlan show interface^|find "Name"
    ') do for /f "tokens=*" %%x in ("%%b") do (
  echo netsh wlan set profileorder name="%WIFI%" interface="%%x" priority=1
)

对脚本所做的更改(read more):

  • 在所有 %a%b%c 中将百分号加倍为 %%a%%b%%c,以便在 .bat脚本;
  • 嵌套循环而不是创建辅助文件;
  • for /f "tokens=*" 将离开 trim blak space(s);
  • 高效的 netsh 命令仅 echo 仅用于调试目的(在调试后立即将 echo netsh 替换为 netsh)。

可以使用命令行中的一行来代替批处理:

for /f "tokens=1,* delims=:" %a in ('netsh wlan show interface^|find "Name"') do @for /f "tokens=*" %x in ("%b") do @echo netsh wlan set profileorder name="%WIFI%" interface="%x" priority=1