[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

求批处理代码
(注:星号位置、数量及字符串长度均不是固定值)

回复 8# aloha20200628


    谢谢,这又是一种新思路

TOP

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

TOP

以下代码是来自 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

TOP

回复 5# flashercs


    经测试有效,感谢!

TOP

  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
微信:flashercs
QQ:49908356

TOP

感谢以上二位大神,但如果不用第三方工具呢?

TOP

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

TOP

  1. sed -i "s/\*/-/g" 1.txt
复制代码
http://bcn.bathome.net/s/tool/index.html?key=sed 用到的工具
目的,学习批处理

TOP

返回列表