Se connecter avec
S'enregistrer | Connectez-vous

[Batch] Boucle, tri

Dernière réponse : dans Programmation

Bonjour,
Je m'initie un peu au batch de windows, et je me prends la tête avec un script de rien du tout visant à renommer un ensemble de fichiers pour que ça ressemble à:
Sujet01
Sujet02
Sujet03
Sujet04

etc.

Pour l'instant ça ressemble à ça:

  1. @ECHO OFF
  2. set a=1
  3. echo "Quel nom voulez-vous pour vos fichiers?"
  4. set /P nom=Nom:
  5. FOR %%i IN ( *.jpg ) DO REN %%i %nom%%a%.jpg
  6. set /A a=a+1
  7. @echo ON



Mais... cela ne renomme que le premier fichier dans l'ordre alphabétique, pas les autres. Je sais que ma boucle est mal faite mais j'arrive pas à trouver comment faire pour mettre l'incrémentation dedans et repartir pour prendre en compte tous les fichiers.
Et quand j'arrive à prendre tous les fichiers, c'est l'incrémentation qui foire :-(

Le 2e problème est qu'il me faut trier en entrée les fichiers par date de modification, mais j'avoue que je ne vois pas comment me servir du sort dans ma boucle, déjà que j'arrive pas à la boucler :-)

Voilà... à l'aide ;o)

Autres pages sur : batch boucle tri

Lassé par la pub ? Créez un compte

Yes ! Ca marche enfin !

  1. @ECHO OFF
  2. set a=1
  3. echo "Quel nom voulez-vous pour les photos ?"
  4. set /P nom=Nom:
  5. echo "Combien de photos y-a-t-il ?"
  6. set /P n=Nombre:
  7. :boucle
  8. FOR /L %%i IN (1,1,%n%) DO REN *.jpg %nom%%%i.jpg
  9. @echo ON


Par contre, comment faire pour renommer suivant un certain ordre, comme celui de... la prise de vue ? -_-
Expert Programmation

(Je réponds ici au premier message)

Vire le @echo on de la ligne 7, il ne sert à rien ;) 

La ligne 6 n'est pas dans la boucle. Syntaxe correcte :
  1. FOR %%i IN (*.jpg) DO (
  2. REN %%i %nom%%a%.jpg
  3. SET /A a=a+1
  4. )


Mais tu ne peux pas te servir de %a% comme ça :/ 
A cause de la non-"expansion retardée" de ta variable %a%.
Voir CMD /? pour plus de renseignement.

Pour ce qui est de l'ordre par date de modif, la commande DIR permet de le faire grâce au paramètre \o Il te reste donc à utiliser FOR /F ... (commande)

Enjoy!

Là je t'avoue être un peu perdu.

J'ai essayé:
  1. @ECHO OFF
  2. set a=1
  3. echo "Quel nom voulez-vous pour les photos ?"
  4. set /P nom=Nom:
  5. echo "Combien de photos y-a-t-il ?"
  6. set /P n=Nombre:
  7. dir /O:S | FOR /L %%i IN (1,1,%n%) DO REN *.jpg %nom%%%i.jpg
  8. @echo ON


Qui ne renomme que la première, la plus petite je crois.
Avec /F, je n'ai pas compris si l'on pouvait cumuler /L.
En tout cas, en les cumulant:

  1. FOR /F dir /O:S /L %%i IN (1,1,%n%) DO REN *.jpg %nom%%%i.jpg


Ca ne fait plus rien ;o)

Seldon, un peu paumé...
Expert Programmation

Ah bah la soluce pour écrire sur trois chiffres est aussi dans SET /? :

Afficher pleins de 0, suivi du nombre et ne prendre que les n derniers :

SET a=2
SET b=00000000000000%a%
ECHO %b:~-3%

SET a=
SET b=00000000000000%a%
ECHO %b:~-3%

SET a=123
SET b=00000000000000%a%
ECHO %b:~-3%

SET a=3214
SET b=00000000000000%a%
ECHO %b:~-3%


Tu tâcheras d'avoir moins de 1000 photos, picétoo.
Expert Programmation

(EDIT: A chaque fois j'ai un message de retard.)

Meuhhhhhhhh non.

Relis l'aide de FOR /F. Tu verras qu'il faut mettre la commande DIR /O.. dans les parenthèses.
Pour ton %a%, c'est comme tu en avais l'intuition SET a=2 / SET /A a=a+1 mais en utilisant l'expansion retardée. Pour ça, RTFM aux pages SET et SETLOCAL ;) 
Expert Programmation

:) 

Tu as remarqué, je semble avoir la solution mais je ne te donne que des pistes pour la trouver par toi-même. En plus, quand tu l'auras trouvée, j'exigerai de toi que tu nous la donnes au complet...

Je suis vraiment un enfoiré... :o 
Lassé par la pub ? Créez un compte