批处理 星号的替换

批处理中通常替换方法是 set var=%var:A=B%

但是星号是这样替换不起作用的

set var=%var:*=X%   <----- 出错 此时不应有 =%

set var=%var:^*=X%  <------ 这样星号还是没有替换

set var=%var:**=X%   <------ 这样只替换第一个星号 第二个星号还是没有替换 并且丢失第一个星号左边的字符串

:: Replace all asterisk characters in a variable

:: Usage:
:: set-ast <variable-name> <replacement-value>

@echo off
@setlocal enabledelayedexpansion

set variable=%~1
set value=!%~1!
set replacement=%~2

:loopback
  set righthand=!value:**=!

  if ["%value%"]==["%righthand%"] (goto quit)

  if ["%righthand%"]==[""] (
    set lefthand=%value:~,-1%
  ) else (
    set lefthand=!value:%righthand%=!
    set lefthand=!lefthand:~0,-1!
  )

  set value=%lefthand%%replacement%%righthand%
  goto loopback

:quit
for /f "delims=" %%v in ("!value!") do (
  endlocal
  set "%variable%=%%v"
)
原文地址:https://www.cnblogs.com/nlsoft/p/9333738.html