Как заменить содержимое переменной в пакетном файле Windows

Я пишу простой сценарий для замены текста в переменной среды другим текстом. Проблема, которую я получаю, заключается в том, что замещенный или замещенный текст извлекается из других переменных

SET a=The fat cat
ECHO %a%
REM Results in 'The fat cat'
ECHO %a:fat=thin%
REM Results in 'The thin cat'

Работает нормально (вывод - «Толстый кот» и «Худой кот»

Однако, если «толстый» или «тонкий» находятся в переменные, это не работает

SET b=fat
ECHO %a:%c%=thin%
REM _Should_ give 'The thin cat'.
REM _Actually_ gives '%a:fat=thin%' (the %c% is evaluated, but no further).

REM using delayed evaluation doesn't make any difference either
ECHO !a:%c%=thin!
REM Actual output is now '!a:fat=thin!'

Я знаю, что это можно сделать, поскольку раньше видел это в блогах, но я никогда не сохранял ссылку на блоги.

У кого-нибудь есть идеи?

PS. Я запускаю скрипты на Windows 7

PPS. Я знаю, что это проще в Perl / Python / другом выбранном языке сценариев, но я просто хочу знать, почему то, что должно быть простым, не сразу становится очевидным.

PPPS. Я также пробовал скрипты с явно включенной функцией отложенного раскрытия

SETLOCAL enabledelayedexpansion

Это не имеет значения.

12
задан Ross Ridge 5 July 2016 в 04:04
поделиться