A toutes fins utiles, voici une réponse à ce problème non trivial...
Cette solution est sous la forme d'une fonction
Exemples d'appel dans un script bat :
call:remplacerSousChaine bonjour#VARIABLE#monde #VARIABLE# le
echo %chaineReponse%
--> affichera : "bonjourlemonde"
Du coup pour le message initial, la solution est :
call:remplacerSousChaine "%path%" "%systemroot%\%new_rep%" ""
Voici la fonction :
REM -------------------------------------------------------------------------------------------------------------
REM Cette fonction permet de remplacer dans une variable donnée du texte par un autre
REM Préconditions
REM * la variable d'environnement %chaineReponse% ne doit pas être initialisée, car elle va être utilisée au cours des traitements internes de cette fonction
REM * les droits en écriture sur le répertoire courant doivent être attribués à ce script, car celui-ci utilise un fichier temporaire.
REM parametres :
REM %1 : le texte complet, dont il faut remplacer une sous-chaîne "%chaineARemplacer% par une autre %chaineDeRemplacement%
REM %2 : le texte dont il faut remplacer une sous-chaîne par une autre
REM %3 : le texte de remplacement.
REM
REM Si des espaces sont contenus dans les paramètres, il est nécessaire d'encapsuler ces paramètres par des doubles cotes
REM
REM Exemples d'appels
REM
REM call:remplacerSousChaine "bonjour #ARTICLE# monde !" #article# le
REM ---> retournera "bonjour le monde" (sans les guillemets
REM call:remplacerSousChaine bonjour#ARTICLE#monde #article# le
REM ---> retournera "bonjourlemonde" (sans les cotes)
REM Post-conditions
REM * la variable %chaineReponse% contient le texte %chaineDeTravail% dans lequel toutes les occurrences de %chaineARemplacer% ont été substituées par %chaineDeRemplacement%
REM -------------------------------------------------------------------------------------------------------------
:remplacerSousChaine
REM ATTENTION, pour toute évolution dans cette fonction, faire très attention à ne pas mettre d'espace
REM dans les instructions, car cela génèrera une réponse avec espaces !
call:supprimerQuotes %1
set chaineDeTravail=%reponseSupprimerQuotes%
call:supprimerQuotes %2
set chaineARemplacer=%reponseSupprimerQuotes%
call:supprimerQuotes %3
set chaineDeRemplacement=%reponseSupprimerQuotes%
set partiedroite=%%chaineDeTravail:%chaineARemplacer%=%chaineDeRemplacement%%%
set instruction=set chaineReponse=%partiedroite%
rem le nom du fichier bat que l'on va générer pour l'occasion...
set FICHIER_BAT_TMP=lance.bat
rem le nom du fichier reponse dans lequel le fichier bat temporaire va écrire son résultat.
set FICHIER_REPONSE_TMP=reponse.txt
rem on supprime le bat temporaire et son fichier de réponse associé
if exist %FICHIER_BAT_TMP% del %FICHIER_BAT_TMP%
if exist %FICHIER_REPONSE_TMP% del %FICHIER_REPONSE_TMP%
echo @echo off > %FICHIER_BAT_TMP%
echo set chaineDeTravail=%chaineDeTravail%>>%FICHIER_BAT_TMP%
echo %instruction%>>%FICHIER_BAT_TMP%
echo echo %%chaineReponse%%^>%FICHIER_REPONSE_TMP%>>%FICHIER_BAT_TMP%
echo exit >> %FICHIER_BAT_TMP%
cmd /C %FICHIER_BAT_TMP%
FOR /F "delims=," %%i IN (%FICHIER_REPONSE_TMP%) DO set chaineReponse=%%i
rem suppression du fichier temporaire de réponse...
del %FICHIER_REPONSE_TMP%
del %FICHIER_BAT_TMP%
goto:eof
REM Cette fonction supprime les guillemets éventuels du paramètre
REM Le résultat est stocké sous %reponseSupprimerQuotes%
:supprimerQuotes
set str=%1
for /f "useback tokens=*" %%a in ('%str%') do set str=%%~a
set reponseSupprimerQuotes=%str%
goto:eof