Замена строк в пакетном файле

Мы можем заменить строки в пакетном файле, используя следующую команду

set str="jump over the chair"
set str=%str:chair=table%

Эти строки отлично работают и меняют строку "прыгать через стул", чтобы "перепрыгнуть через стол". Теперь я хочу заменить слово "стул" в строке некоторой переменной, и я не знаю, как это сделать.

set word=table
set str="jump over the chair"
??

Любые идеи?

Ответ 1

Вы можете использовать!, но у вас должен быть установлен переключатель ENABLEDELAYEDEXPANSION.

setlocal ENABLEDELAYEDEXPANSION
set word=table
set str="jump over the chair"
set str=%str:chair=!word!%

Ответ 2

Вы можете использовать следующий небольшой трюк:

set word=table
set str="jump over the chair"
call set str=%%str:chair=%word%%%
echo %str%

call вызывает другой слой расширения переменной, что делает необходимым процитировать оригинальные знаки %, но все это заканчивается в конце.

Ответ 3

c: > replace.bat "123def789" "def" "456"


        replace.bat

setlocal enabledelayedexpansion
set data=%1
set search=%2
set replace=%3
set "data=!data:%search%=%replace%!"
echo %data%
REM Use %data% here before calling endlocal.
endlocal