Batch file 替换for循环中的字符

Batch file 替换for循环中的字符,batch-file,Batch File,是否有方法将:search=replace-语法应用于批处理中for循环内的%%var 我试图用冒号替换机器mac地址中的所有连字符(然后使用它们)。不幸的是,我的常规方法set var=%var:-=:%在for循环中不起作用 FOR /F "tokens=12 delims= " %%G IN ('ipconfig /all ^| find /I "Physical Address"') DO ( SET var=%%G SET newmac=%var:-=:

是否有方法将
:search=replace
-语法应用于批处理中for循环内的
%%var

我试图用冒号替换机器mac地址中的所有连字符(然后使用它们)。不幸的是,我的常规方法
set var=%var:-=:%
在for循环中不起作用

    FOR /F "tokens=12 delims= " %%G IN ('ipconfig /all ^| find /I "Physical Address"') DO (
      SET var=%%G
      SET newmac=%var:-=:%
      wget https://api-server-uri/pxe/do-stuff?newmac=%newmac%
    )
问题是
%var:-=:%
的值不会随着
%%G
的变化而变化


谢谢

谢谢Stephans的评论:

    Setlocal enabledelayedexpansion
    FOR /F "tokens=12 delims= " %%G IN ('ipconfig /all ^| find /I "Physical Address"') DO (
      SET var=%%G
      wget https://api-server-uri/pxe/do-stuff?newmac=!var:-=:!
    )

欢迎来到这个世界。啊,太好了!谢谢@Stephan!!如果在
for
循环中没有其他内容,则甚至不需要延迟扩展。只需
FOR/F“tokens=12 delims=“%%G IN('ipconfig/all^ | find/I“物理地址”)设置var=%%G
wgethttps://api-server-uri/pxe/do-stuff?newmac=%var:-=:%
@Stephan,你的意思是把
wget
放在循环之外,对吗?显然,这只能在循环只迭代一次的情况下完成…请尝试:
FOR/F“tokens=12-17 delims=-“%%G in('ipconfig/all^ | find/I“Physical Address”)DO wgethttps://api-server-uri/pxe/do-stuff?newmac=%%G:%%H:%%I:%%J:%%K:%%L