Problème dans boucle FOR avec setlocal

Résolu
Nabil -  
 librequetucrois -
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

4 réponses

Nabil
 
j'ai oublié de préciser que cété du batch MSDOS .... :)
0
BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   159
 
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?
0
Nabil > BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention  
 
merci 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 ...

:(
0
BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   159 > Nabil
 
Je ne savais mais dans ce cas désolé, je n'ai pas d'autre idée sous la main.
0
BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   159 > BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention  
 
Ou alors peut-être essayer un copy en lieu et place d'un rename, au pire tu fera un del après si ça marche.
0
Nabil > BlueMind Messages postés 583 Date d'inscription   Statut Membre Dernière intervention  
 
cela ne marche pas plus avec un copy ... :(
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161
 
Salut, es-tu sur que sur la racine du C: tous tes fichiers ne sont pas protegés et donc rename impossible
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161
 
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é.
0
Nabil
 
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
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161 > Nabil
 
es tu sur que les fichiers de la racine de ton C: ne sont pas protegeés?
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161 > zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention  
 
pardon je n'ai pas vu que tu avais teste sur un autre repertoire
0
Nabil > zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention  
 
non les fichiers ne sont pas protégés ...

merci de ta réponse
0
Nabil > zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention  
 
le 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

.....
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161
 
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
0
Nabil
 
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
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161 > Nabil
 
essaie cela (cela supprime les 9 derniers caracteres du nom de fichier)

Set FICHIERDST=%%~nxA
Set FICHIERDST=!FICHIERDST:~0,9!
0
Nabil > zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention  
 
merci 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é ....
0
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   161 > Nabil
 
etonant 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
0
Nabil > zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention  
 
oui 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%
0