Board logo

标题: [文本处理] [已解决]批处理如何替换字符串中的星号(*) [打印本页]

作者: hfxiang    时间: 2022-7-11 15:02     标题: [已解决]批处理如何替换字符串中的星号(*)

本帖最后由 hfxiang 于 2022-7-12 09:59 编辑

如,
原字符串        1*23*ABCD**5
目标字符串        1-23-ABCD--5

求批处理代码
(注:星号位置、数量及字符串长度均不是固定值)
作者: hlzj88    时间: 2022-7-11 20:31

  1. sed -i "s/\*/-/g" 1.txt
复制代码
http://bcn.bathome.net/s/tool/index.html?key=sed 用到的工具
作者: flashercs    时间: 2022-7-11 20:42

批处理替换字符能力有限;*是特殊字符 无法替换,用第三方工具 sed.exe解决或用powershell
  1. echo 1*23*ABCD**5|sed -E -e "s/\*/-/g"
复制代码

作者: hfxiang    时间: 2022-7-12 08:18

感谢以上二位大神,但如果不用第三方工具呢?
作者: flashercs    时间: 2022-7-12 09:28

  1. @echo off
  2. for /f "delims=" %%i in ('powershell -c "'1*23*ABCD**5'.Replace('*','-')"') do set str2=%%i
  3. echo %str2%
  4. pause
复制代码
回复 4# hfxiang
作者: hfxiang    时间: 2022-7-12 09:58

回复 5# flashercs


    经测试有效,感谢!
作者: hfxiang    时间: 2022-7-12 10:02

以下代码是来自 https://qa.1r1g.com/sf/ask/491584831/
经测试有效,但有点复杂,不太想用

@echo off
:Replace_asterisk <variable> <replacement>
setlocal EnableDelayedExpansion
set "var=%~1"
set "replace=%~2"

rem Add dummy char to accept also a star in front
set "var=#!var!"
:replaceLoop
for /F "tokens=1 delims=*" %%A in ("!var!") do (
  set "prefix=%%A"
  set "rest=!var:*%%A=!"
  if defined rest (
    set "rest=!REPLACE!!rest:~1!"
    set Again=1
  ) else set "Again="
  set "var=%%A!rest!"
)
if defined again goto :replaceLoop
set "var=!var:~1!"
echo !var!
exit /b
作者: aloha20200628    时间: 2022-7-12 11:19

set "s1=1*23*ABCD**5"
set "t1=*" & set "t2=-"
(echo,%s1%>s1.n)&(for %%n in (s1.n) do set/a "m=%%~zn-3")&(del/q s1.n)
setlocal enabledelayedexpansion
for /L %%k in (0,1,%m%) do (
   set "c=!s1:~%%k,1%!"
   if !c! neq %t1% (set "s2=!s2!!c!") else (set "s2=!s2!%t2%")
)
echo,!s2!
endlocal &pause &exit/b
作者: hfxiang    时间: 2022-7-12 12:21

回复 8# aloha20200628


    谢谢,这又是一种新思路




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2