Problème dans boucle FOR avec setlocal

Résolu
Bonjour,

J'ai un gros problème depuis 2 jours ! Pouvez vous m'aider svp ?

J'ai ce code :

setlocal enableDelayedExpansion
for %%A in (C:\*) do (
set FICHIER=%%~nxA
echo !FICHIER!
rename !FICHIER! !FICHIER!_teste
)
endlocal

Pouvez vous me dire pourquoi cela marche quand je fais un ECHO, le contenu de la variable !FICHIER! est bien appelée.
Par contre, quand je fais le RENAME, le paramètre !FICHIER! ne passe pas !!

Pouvez vous me dire pourquoi, y'a t-il une alternative pour faire la même chose et qui marche ?

nabil
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. voici une solution attention à l'emplacement ou tu vas stocker le fichier temporaire

    @echo off
    setlocal enableDelayedExpansion
    IF EXIST rename.lst del /F rename.lst
    for %%A in (C:.\*.as4) do (
    Set FICHIERSRC=%%A
    Set FICHIERDST=%%~nxA_Test
    echo !FICHIERSRC!,!FICHIERDST!>>rename.lst
    )

    endlocal
    for /F "tokens=1,2 delims=, " %%i in (rename.lst) do rename %%i %%j
    IF EXIST rename.lst del /F rename.lst
    1. oui, merci ca marche !
      mais le problème est que cela ne marche pas si je souhaite racourcire le nom de fichier :

      j'ai DES fichiers du type AABBCCDD_06012008 dans un répertoire TEST
      je souhaite racourcir leur nom de fichier en AABBCCDD
    2. @Nabilessaie cela (cela supprime les 9 derniers caracteres du nom de fichier)

      Set FICHIERDST=%%~nxA
      Set FICHIERDST=!FICHIERDST:~0,9!
    3. @zavengermerci de ta réponse !

      mais ca ne marche pas
      j'ai tenté
      set FICHIER_ASSOCIE=%%~nxA
      Set FICHIERDST=!FICHIER_ASSOCIE:~0,8!

      et en faisant
      rename %%~nxA !FICHIERDST!
      ou
      rename %%~nxA %FICHIERDST%
      ca ne marche pas

      et
      echo FICHIERDST donne : !FICHIER_ASSOCIE:~0,8!

      toujours bloqué ....
    4. @Nabiletonant car cela marche chez moi, tu es sur d'etre toujours en setlocal enableDelayedExpansion

      et tu ne peux pas faire un rename %%~nxA %FICHIERDST% car ne contient pas le nom complet du fichier à renommer
    5. @zavengeroui je confirme ... voici le code que j'utilise, vois tu une erreur ?

      cd C:\temp\
      setlocal enableDelayedExpansion
      for %%A in (C:\temp\*) do (
      set FICHIER_ASSOCIE=%%~nxA
      Set FICHIER_ASSOCIE=!FICHIER_ASSOCIE:~0,8!
      rename %%~nxA %FICHIER_ASSOCIE%
      )
      endlocal

      le résultat, le rename contient que le contenu de %%~nxA et non %FICHIER_ASSOCIE%
  2. de plus l'utilisation du caractère ! a la place du % donne un comportement different. dans le cas du !, la variable est evaluée à chaque fois. un petit exemple :

    @echo off
    setlocal EnableDelayedExpansion
    set Liste=
    for %%a in (*) do set Liste=%%a& echo !Liste!

    @echo off
    set Liste=
    for %%a in (*) do set Liste=%%a& echo %Liste%

    Dans ce dernier cas, rien ne sera affiché.
    1. Et tu n'aurais pas une solution ?
      Je cherche, pour chaque fichier d'un répertoire, à raccourcir le nom de fichier

      setlocal ...
      for %%A in (c:\test\*) do (
      set FICHIER_ASSOCIE=%%~nxA
      rename %%~nxA !FICHIER_ASSOCIE:~0,8!
      )
      endlocal

      si quelqu'un à une solution ...

      merci
    2. @Nabiles tu sur que les fichiers de la racine de ton C: ne sont pas protegeés?
    3. @zavengerpardon je n'ai pas vu que tu avais teste sur un autre repertoire
    4. @zavengernon les fichiers ne sont pas protégés ...

      merci de ta réponse
    5. @zavengerle problème vient de l'appel de la variable !FICHIER!

      quand je fais un echo, elle est appelée
      quand c'est une autre fonction, ca ne marche pas
      du coup j'ai essayé de rediriger le echo !FICHIER! vers mon RENAME, mais je n'y arrive pas

      echo !FICHIER! > rename %%~nxA : marche pas
      rename %%~nxA echo !FICHIER! : marche pas
      rename %%~nxA `echo !FICHIER!` : marche pas
      rename %%~nxA < echo !FICHIER : marche pas

      .....
  3. Salut, es-tu sur que sur la racine du C: tous tes fichiers ne sont pas protegés et donc rename impossible
    1. j'ai oublié de préciser que cété du batch MSDOS .... :)
      1. Salut,

        Et bien je ne sais pas si c'est la solution, mais je n'avais jamais vu qu'on pouvait utiliser !variable!, peux-tu essayer avec %variable% pour voir si ça marche mieux?
      2. @BlueMindmerci de ta réponse,

        mais quand tu as un " setlocal enableDelayedExpansion " pour utiliser la variable crée tu utilises des ! à la place des % (si j'ai bien compris)

        J'ai biensur testé avec % mais sans résultats ...

        :(
      3. @NabilJe ne savais mais dans ce cas désolé, je n'ai pas d'autre idée sous la main.
      4. @BlueMindOu alors peut-être essayer un copy en lieu et place d'un rename, au pire tu fera un del après si ça marche.