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

时间:2015-01-09 02:00:57

标签: string batch-file replace

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

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

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

由于

1 个答案:

答案 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