批量替换字符串中的一个字符?

Replacing a character in a string in batch?

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

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

如何用变量 replacewith 中定义的字符替换位置 p 中定义的字符?如果不行,可不可以不使用replacewith变量,用另一个固定的字符替换字符?

谢谢

是的,只需将替换内容夹在子字符串中即可。

@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