Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme boucle for dans fichier batch

3 réponses
Avatar
Guillaume
Bonjour a tous,

j'ai un petit probleme avec un fichier batch qui doit renommer des
répertoires automatiquement. Il a pour but de supprimer le dernier caractère
de chaque repertoire.

Le voici:
for /D %%R in (*) do (
echo %%R

set DestDir=%%R:~0,-1%
echo Destdir=%DestDir%

echo REN %%R %DestDir%
ren %%R %DestDir%
set SrcDir=
set DestDir=
)

Le probleme est que cette manipulation n'est pas appliquée (set
DestDir=%%R:~0,-1%)
lorsque le script est exécuté, la commande suivante "echo Destdir=%DestDir%"
me donne: Destdir=(vide)

Quelqu'un a une idée de la ou cela peut venir?

Merci à tous,
Guillaume

3 réponses

Avatar
Jean-Claude BELLAMY
Dans le message :,
Guillaume a pris la peine d'écrire ce
qui suit :
Bonjour a tous,

j'ai un petit probleme avec un fichier batch qui doit renommer des
répertoires automatiquement. Il a pour but de supprimer le dernier
caractère de chaque repertoire.

Le voici:
for /D %%R in (*) do (
echo %%R

set DestDir=%%R:~0,-1%
NANNNNNNNNNNNNNNNNNNNNNNNNNN !


DEUX ERREURS !
1) Dans une boucle où on manipule des variables d'environnement,
on doit utiliser l'expansion retardée, qu ipermet de faire évoluer
une variable d'environnement à l'intérieur d'une boucle!
(exécute la commande "SET /?" pour avoir des explications à ce sujet)

Et pour cela, le caractère "%" est remplacé par "!"

2) Tu ne pas appliquer une syntaxe de variable d'environnement
à une variable de boucle !

Donc il faut procéder en 2 temps :
set DestDir=%%R
set DestDir=!Destdir:~0,-1!

[...]
Le probleme est que cette manipulation n'est pas appliquée
(set DestDir=%%R:~0,-1%)
NORMAL !

lorsque le script est exécuté, la commande suivante "echo
Destdir=%DestDir%" me donne: Destdir=(vide)
NORMAL !



Quelqu'un a une idée de la ou cela peut venir?
Je te l'ai dit plus haut...


Ton script doit être écrit ainsi :
---------------------------
@echo off
for /D %%R in (*) do (
echo %%R
set DestDir=%%R
set DestDir=!DestDir:~0,-1!
echo Destdir=!DestDir!
echo REN %%R !DestDir!
ren %%R !DestDir!
)
set DestDir ---------------------------

(évidemment j'ai testé!)
Alors, elle est pas belle la Vie ? ;-) !



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr

Avatar
Guillaume
DEUX ERREURS !
1) Dans une boucle où on manipule des variables d'environnement,
on doit utiliser l'expansion retardée, qu ipermet de faire évoluer
une variable d'environnement à l'intérieur d'une boucle!
(exécute la commande "SET /?" pour avoir des explications à ce sujet)

Et pour cela, le caractère "%" est remplacé par "!"
Donc c'est à ca que cela sert l'expansion retardée... Je n'avais pas bien lu

ou en diagonale.


2) Tu ne pas appliquer une syntaxe de variable d'environnement
à une variable de boucle !

Donc il faut procéder en 2 temps :
set DestDir=%%R
set DestDir=!Destdir:~0,-1!
c'est ce que j'avais fait au debut, mais a force de chercher et de faire

n'importe quoi, voila ou ca m'a mené :)

Ton script doit être écrit ainsi :
---------------------------

@echo off
for /D %%R in (*) do (
echo %%R
set DestDir=%%R
set DestDir=!DestDir:~0,-1!
echo Destdir=!DestDir!
echo REN %%R !DestDir!
ren %%R !DestDir!
)
set DestDir > ---------------------------

(évidemment j'ai testé!)
Alors, elle est pas belle la Vie ? ;-) !

Moi je n'ai pas testé, mais je suis sur que ca marche!


Merci beaucoup & bonne journée.
Guillaume


Avatar
Gilles LAURENT
"Guillaume" a écrit dans le
message de news:

Bonsoir,

|| DEUX ERREURS !

Non, TROIS car il est nécessaire de s'assurer que l'expansion des
variables d'environnement est activée. Pour cela il est possible
d'utiliser la commande 'setlocal' qui d'une part permet d'activer cette
fonctionnalité et d'autre part de préserver l'environnement initial.

@echo off
setlocal enabledelayedexpansion

for /D %%R in (*) do (
echo %%R
set DestDir=%%R
set DestDir=!DestDir:~0,-1!
echo Destdir=!DestDir!
echo REN %%R !DestDir!
ren %%R !DestDir!
)

endlocal

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD