批量替换字符串中的一个字符?
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
在开始之前,我向您保证,这不是重复的。我已经阅读了多种替换字符串中特定字符的解决方案,但这并不是我想要实现的具体目标。我知道如何替换字符串 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