Page 1 sur 1

Commande SET à l'intérieur d'une boucle

Posté : 21 mars 2015 16:30
par Hugues MEFFRE
Bonjour,

J'essaie en vain d'inclure une commande SET dans une boucle FOR ... IN ... DO, mais la variable ne prend pas la valeur que devrait normalement lui attribuer SET.

But de cette commande : renommer automatiquement des fichiers portant le même nom et se terminant par un chiffre (ex : fichier1.doc , fichier2.doc , etc... à renommer en fichier2.doc , fichier3.doc, etc... de façon à créer dans le dossier un nouveau fichier1.doc plus récent) .

Aperçu de mon fichier batch :

@ echo off
echo Entrez le nombre de fichiers à renommer et le nom commun à chacun sans extension

for /l %%a in (1%,-1,1) do (
set valeur=%%a+1
ren %2%%a.* %2%valeur%.*
)

Or la variable "valeur" qui devrait s'incrémenter à chaque boucle ne bronche pas. Donc impossible de renommer mes fichiers.

Quelqu'un peut m'expliquer où est l'erreur ?

D'avance merci

Re: [Résolu] Commande SET à l'intérieur d'une boucle

Posté : 22 mars 2015 00:26
par Hugues MEFFRE
(Re)bonjour,

J'ai fini par trouver la solution ! Il faut activer l'expansion de variable retardée ;)

Le fichier devient donc :

@ echo off
echo Entrez le nombre de fichiers à renommer et le nom commun à chacun sans extension

setlocal enabledelayedexpansion

for /l %%a in (%1,-1,1) do (
set /a valeur=%%a+1
ren %2%%a.* %2!valeur!.*
)

et ça marche !

Merci à Batchman ; je me suis inspiré de sa solution d'un autre post :idea:

Re: Commande SET à l'intérieur d'une boucle

Posté : 22 sept. 2015 17:05
par dépannage pc
Bonjour,

je ne savais pas que l'on pouvait faire des boucle for en batch !
Ou avez vous trouvez le manuel ? man for ?
Sur mon site web: http://www.elogweb.fr , je vais surement poster des petits programmes que j'ai fais en batch !! et j'aimerais faire une liste de toutes les commandes (pour la programmation)