在开始之前,我保证,这不是重复。我已经阅读了多个替换字符串中某个字符的解决方案,但这并不是我想要实现的。我知道如何替换字符串X
中的STUVWXYZ
,但我希望将5th
字母替换为A
。例如:
set p=5
set string=STUVWXYZ
set replacewith=A
如何将位置p
中定义的字符替换为变量replacewith
中定义的字符?如果这不可能,是否可以不使用replacewith
变量,并将该字符替换为另一个固定字符?
由于
答案 0 :(得分: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