Instruction set dans boucle for ne fonctionne pas

Résolu
Bonjour,

J'ai un petit souci avec une boucle FOR dans un batch (c'est mon premier batch) et je n'arrive pas determiner l'origine du probleme ! Si quelqu'un aurai quelque minute pour m'aider ce serai super :-)
==============================================================
voici ma boucle :
echo on
for %%x in (*.txt) do (
set /a cpt+=1
echo %cpt%
set NomFicSortie=%EMET%.%RECEPT%.%CHAMP3%.F%HHMM%%cpt%.%DJJMMAA%.%PRET%
echo %NomFicSortie%
rename "%%~fx" "%NomFicSortie%"
)
@echo off
==============================================================
mon probleme :
les deux instruction "set" fonctionne en dehors de la boucle mais ne fonctionne plus une fois dedans !! et j'avoue ça m'echappe !
==============================================================
resultat :
d:\test\source>for %x in (*.txt) do (
set /a cpt+=1
echo 1
set NomFicSortie="XXXXX"."XXXX"."XX".F14331.D231013."PRET"
echo
rename "%~fx" ""
)

d:\test\source>(
set /a cpt+=1
echo 1
set NomFicSortie="XXXXX"."XXXX"."XX".F14331.D231013."PRET"
echo
rename "d:\test\source\azerty123.txt" ""
)
1
Commande ECHO activée.
Le nom de fichier existe déjà, ou le fichier
est introuvable.

d:\test\source>(
set /a cpt+=1
echo 1
set NomFicSortie="XXXXX"."XXXX"."XX".F14331.D231013."PRET"
echo
rename "d:\test\source\test.txt" ""
)
1
Commande ECHO activée.
Le nom de fichier existe déjà, ou le fichier
est introuvable.

3 réponses

  1. Contributeur
    hello
    pour modifier des variables dans une boucle for, il faut
     setlocal enableDelayedExpansion
    au début du script et utiliser
     ! 
    à la place de
     % 
    .
    ...
    for %%x in (*.txt) do (
    set /a cpt+=1
    echo !cpt!
    ...
    0
    1. Super ça fonctionne Merci à toi !

      Bon je vais chipoter un peu mais le echo ne m'affiche pas de contenu de la variable :-/
      0
      1. Contributeur
        j'ai 7 fichiers .bat
        C:> bb
        1
        2
        3
        4
        5
        6
        7
        C:> type bb.bat
        @echo off
        SETLOCAL ENABLEdelayedExpansion
        set cpt=0
        for %%x in (*.bat) do (
        set /a cpt+=1
        echo !cpt!
        )
        montre le code
        0