【问题标题】:Replacing a character in a string in batch?批量替换字符串中的字符?
【发布时间】:2015-01-09 02:00:57
【问题描述】:

在开始之前,我向您保证,这不是重复的。我已经阅读了多种替换字符串中某个字符的解决方案,但这并不是我想要实现的。我知道如何替换字符串STUVWXYZ 中的X,但我想用A 替换5th 字母。示例:

set p=5
set string=STUVWXYZ
set replacewith=A

如何将在位置p 中定义的字符替换为在变量replacewith 中定义的字符?如果这不可行,是否可以不使用replacewith 变量,并将该字符替换为另一个固定字符?

谢谢

【问题讨论】:

    标签: string batch-file replace


    【解决方案1】:

    是的,只需将替换与子字符串夹在中间。

    @echo off
    setlocal enabledelayedexpansion
    
    set p=5
    set string=STUVWXYZ
    set replacewith=A
    
    :: get first %p% characters of string
    set "left=!string:~0,%p%!"
    
    :: remove %p%+1 characters for the right half
    set /a r = p + 1
    set "right=!string:~%r%!"
    
    :: left + middle + right
    set "string=%left%%replacewith%%right%"
    
    echo %string%
    

    如果您想在脚本中多次执行此操作,则将其转换为这样的子例程可能是有意义的:

    @echo off
    setlocal
    
    set p=5
    set string=STUVWXYZ
    set replacewith=A
    
    call :replace string %p% %replacewith%
    
    echo %string%
    
    goto :EOF
    
    :replace <var_to_manipulate> <position> <replacement>
    setlocal enabledelayedexpansion
    set "string=!%~1!"
    set "p=%~2"
    set /a r=p+1
    set "left=!string:~0,%p%!"
    set "right=!string:~%r%!"
    endlocal & set "%~1=%left%%~3%right%"
    goto :EOF
    

    【讨论】:

    • 我知道这与延迟扩展有关,但是当我尝试添加 replacewith 时我感到很困惑,因为我使用了 ! 而不是 %,从那里,我只是发疯了,将随机的 %'s 交换为 !'s。谢谢。出于某种原因,我在四分钟内无法接受你的回答,所以不要担心。我会尽快这样做的。
    • @blaizor 是的,可能需要一点时间来适应。请记住,当您将!% 结合使用时,! 在外面。如果您发现我的回答有帮助,请考虑将其标记为已接受。 See this page 解释为什么这很重要。
    • 我特别喜欢你的编辑,我在考虑一个子程序但不使用参数,这使得操作过程本身变得容易得多。
    • @blaizor 我刚刚意识到我的逻辑错了。我正在替换 W,而不是 X。编辑即将到来....
    • 我了解您所有的子程序代码,但有一件事我认为没有必要。第二行。为什么需要setlocal?对于该语言环境,您永远不会 endlocal,而是在子例程中设置 local/endlocal。
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2015-07-17
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多