[Batch] Renommer fichiers avec incrémentation

Résolu/Fermé
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 - 16 mars 2010 à 17:14
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 - 17 mars 2010 à 09:55
Bonjour,

Ci-dessous une problématique récurrente (Au vu du nombre de posts disponibles sur les forums) mais dont je ne parviens à trouver de solution.

Pour faire simple:

Dans un répertoire "taaa\" j'ai des fichiers qui viennent s'ajouter par grappes de 5 toutes les 5 minutes.
Leur nom est toujours le même:

"titi_xxx.jpg" ou "xxx" est un chiffre dont la longueur peut varier ( de 1 à 99999...)
Les 5 fichiers ont toujours des xxx qui se suivent

Exemple: titi_123.jpg , titi_124.jpg , titi_125.jpg ....

Le xxx peut être totalement aléatoire. Cela peut aller de 120 à 125, 1250 à 1255 bref cela dépend de l'humeur du serveur qui les génère =)

Je souhaiterai les renommer avec une suite de chiffre qui soit toujours la même: 1,2,3,4,5

En gros, de titi_121.jpg , titi_122.jpg , titi_123.jpg nous aurions après exécution du batch titi_1.jpg, titi_2.jpg...

Mon code est donc:

@echo off

set /a nb_of_files=1
if exist "*.jpg" for /f "delims=" %%a in ('dir /o /b "titi\*.jpg"') do (
rename %%a titi_%nb_of_files%.jpg
set /a nb_of_files+=1
echo %nb_of_files%
)

echo There is %nb_of_files% file(s)



C'est là que les soucis commencent =)

Le batch ne renomme que le premier fichier avec la valeur de la variable "nb_of_files" initiale soit 1. Après il me dit bien entendu que le fichier existe déjà...
Mon echo %nb_of_files% me sort toujours "1" (D'ou le souci cité juste avant)
Mon "echo There is %nb_of_files% file(s)" me sort bien "5".

Donc en gros le compteur s'incrémente bien hors de la boucle mais dans la boucle c'est toujours 1.
Donc impossible de renommer les fichiers de manière correcte.

Si vous avez des idées, je suis preneur.

A noter que j'ai tenté de sortir la partie incrémentation hors de la boucle via un "call" .. En vain c'est toujours 1...

Merci d'avance pour votre aide

2 réponses

dubcek Messages postés 18550 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2022 5 558
17 mars 2010 à 07:27
hello
ajouter au début du script
setlocal enableDelayedExpansion
6
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 1
17 mars 2010 à 09:55
Effectivement, ça marche beaucoup mieux ^^

Merci Dubcek !!!!
0