Comment substituer un contenu variable dans un fichier de commandes Windows

Je suis en train d'écrire un script simple de remplacer un texte dans une variable d'environnement avec d'autres textes. Le problème que j'obtiens c'est avec l'substitué ou substitué texte tiré à partir d'autres variables

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

Fonctionne très bien (la sortie est "Le gros chat" et "The thin chat"

Cependant, si "gras" ou "minces" sont dans des variables, il ne fonctionne pas

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!'

Je sais que cela peut être fait, comme je l'ai vu dans les blogs avant, mais je n'ai jamais sauvegardé le lien vers les blogs.

Quelqu'un a des idées?

PS. Je suis l'exécution des scripts sur Windows 7

PPS. Je sais que c'est plus facile en Perl/Python/d'autres scripts de la langue de leur choix, mais je veux juste savoir pourquoi quelque chose qui devrait être facile n'est pas immédiatement évident.

PPP. J'ai aussi essayé les scripts avec l'expansion retardée explicitement activée

SETLOCAL enabledelayedexpansion

Cela ne fait aucune différence.

source d'informationauteur GKelly