标题: [文本处理] [已解决]批处理如何替换字符串中的星号(*) [打印本页]
作者: 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
复制代码
http://bcn.bathome.net/s/tool/index.html?key=sed 用到的工具
作者: flashercs 时间: 2022-7-11 20:42
批处理替换字符能力有限;*是特殊字符 无法替换,用第三方工具 sed.exe解决或用powershell- echo 1*23*ABCD**5|sed -E -e "s/\*/-/g"
复制代码
作者: hfxiang 时间: 2022-7-12 08:18
感谢以上二位大神,但如果不用第三方工具呢?
作者: flashercs 时间: 2022-7-12 09:28
- @echo off
- for /f "delims=" %%i in ('powershell -c "'1*23*ABCD**5'.Replace('*','-')"') do set str2=%%i
- echo %str2%
- 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 |