Problème dans boucle FOR avec setlocal
Résolu
Nabil
-
librequetucrois -
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
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
Salut, es-tu sur que sur la racine du C: tous tes fichiers ne sont pas protegés et donc rename impossible
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é.
@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é.
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
.....
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
.....
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
@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
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%
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%
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?
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 ...
:(