【问题标题】:Insert Hyphon Every Two Characters Batch每两个字符批量插入连字符
【发布时间】:2024-01-11 04:28:02
【问题描述】:

我正在工作中的一些机器上使用 LAN 唤醒应用程序,并且我正在创建一个脚本以在实验室中对其进行测试。

不幸的是,该应用程序仅读取 MAC 地址(来自 .csv 文件)而没有连字符,并且为了检查机器是否已“唤醒”,需要 ping 机器。我找到了一种使用 ARP 的方法,但是,MAC 地址需要在其中包含连字符才能在 ARP 表中找到。

基本上,我需要能够在 MAC 地址中每两个字符(最好在脚本中)插入一个连字符,因此,转换如下:

XXXXXXXXXXXX -> XX-XX-XX-XX-XX-XX

脚本如下:

for /f %%a in (macaddresses.csv) do (
    start "" wol.exe %%a
    :: CONVERSION HERE
    for /f "tokens=1,2,3 delims= " %%i in ('arp -a ^| find /i "%%a"') do (
        ping %%i
        if %errorlevel% EQU 0 (
            echo MAC address %%a woken up.
            set /a i+=1
        ) else (
            echo MAC address %%a not woken up.
        )
    )
)

我到处搜索,只发现如何在字符串末尾或单词中添加或删除字符。

提前致谢!

【问题讨论】:

    标签: batch-file for-loop command-line windows-7 command-prompt


    【解决方案1】:

    通过逐步删除字符来获得我想要的:

    setlocal enableextensions enabledelayedexpansion
    for /f %%a in (macaddresses.csv) do (
        start "" wol.exe %%a
        set mac=%%a
        set mac=!mac:~0,-10!-!mac:~2,-8!-!mac:~4,-6!-!mac:~6,-4!-!mac:~8,-2!-!mac:~10!
        for /f "tokens=1,2,3 delims= " %%i in ('arp -a ^| find /i "!mac!"') do (
            ping %%i
            if %errorlevel% EQU 0 (
                echo MAC address !mac! woken up.
                set /a i+=1
            ) else (
                echo MAC address !mac! not woken up.
            )
        )
    )
    endlocal
    

    【讨论】:

      最近更新 更多