批处理中通常替换方法是 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"
)

 

相关文章:

  • 2022-03-04
  • 2021-05-21
  • 2021-11-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-31
  • 2021-11-27
猜你喜欢
  • 2021-10-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-20
  • 2021-10-24
相关资源
相似解决方案