[BATCH] Boucle selon nom de fichier SRC ET nom de dossier DST [Résolu/Fermé]

Signaler
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
-
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
-
Bonjour à tous,

Je n'y connais pas grand chose en programmation, néanmoins j'ai un besoin plutôt simple auquel c'est probablement très facile de répondre avec un brin de connaissance :
Je cherche à faire un batch pour automatiser le classement de PDF dans leurs dossiers respectfis.

Les fichiers se nomment "001000 xxxx" (xxx étant une autre suite de chiffres)
Par exemple :
- 001000 xxxx.pdf
- 002000 xxxx.pdf
- 003000 xxxx.pdf
- 052000 xxxx.pdf
- 350000 xxxx.pdf

Les dossiers se nomment juste avec la première série de chiffre, donc ça va de 000000 à 350000, en passant par 025000, 250000, etc.

Les fichiers PDF se retrouvent tous au même endroit, et j'ai besoin de les dispatcher dans leurs dossiers respectifs.

Voici mon script, si on peut appeler ça comme ça...

cd C:\Users\xxx\Downloads\SRC
move "001*" "C:\Users\xxx\Downloads\DST\001000"
move "002*" "C:\Users\xxx\Downloads\DST\002000"
move "003*" "C:\Users\xxx\Downloads\DST\003000"

Problème, il y a + de 300 dossiers (donc de 000000 à 300000), et ça peut aller au-delà.
Comment faire une boucle dans ce cas présent ?

L'idée, si j'ai bien compris, ça serait de remplacer les 001*, 002* par des variables qui s'incrémenteraient à chaque passage de la boucle,
Et remplacer aussi les noms de dossiers de la même manière (001000, 002000, 003000, etc.)

Merci par avance pour votre aide :)

4 réponses

Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 324
hello
on extrait les 6 premiers car. du nom, ce qui donne la destination
enlever le echo si c'est ok
@echo off
setlocal enabledelayedexpansion
set dir=C:\Users\xxx\Downloads\DST\
for %%a in (*.pdf) do (
set dest=%%a
set dest=!dest:~0,6!
echo move "%%a" "%dir%!dest!"
)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 324
prendre les 3 premiers chiffres et ajouter 000
set dest=!dest:~0,3!000
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
36
Yes !!!
Merci mille fois pour ton aide, tout marche impeccable !
Bon weekend :)
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
36
J'ai essayé d'avancer un peu tout seul, ma "boucle" donnerait ça :

cd C:\Users\xxx\Downloads\SRC

for %%X in (1,1,300) do

for %%i in ("*%X%*.pdf") do move "*%X%*.pdf" "C:\Users\xxx\Downloads\DST\*%X%*"


Malheureusement ça ne marche pas du tout, même pas un message d'erreur, la fenêtre s'ouvre et se ferme...
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
36
Merci beaucoup pour ta réponse, ça avance :)

Problème, le répertoire de DST ne porte pas exactement le nom du fichier, par exemple :

Fichiers :
- 001047 00029 ABC.pdf
- 002404 00093 ABC.pdf
- 003292 00125 ABC.pdf
- 004907 00197 ABC.pdf
- 188001 09619 ABC.pdf

(la mention "ABC" du nom du fichier est toujours présente)

Dossiers :
- 001000
- 002000
- 003000
- 004000
- 188000

--> Selon le nombre dans la première partie du nom du fichier (ex. 001047 pour le premier), on le classe dans le dossier correspondant, en raisonnant par "milliers".

Du coup, il faudrait que la boucle parcoure les fichiers, détermine à quel "milliers" appartiennent les 6 premiers chiffres, et le classe dans le dossier correspondant.

Si je ne suis pas clair n'hésite pas.
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
36
Précison, le répertoire "DST" contient donc les dossiers "001000", et "002000" etc.
En l'état le batch ne les mets pas dans les sous-répertoires, mais à la racine du répertoire DST.
Le pire, c'est qu'il les convertit (le PDF porte juste le nom "001"), et enlève le format du fichier :)
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
36
N.B j'ai modifié pour extraire seulement les 3 premiers caractères, ce sont eux qui sont significatifs pour le classement dans les dossiers, puisqu'on raisonne par "milliers".
Messages postés
460
Date d'inscription
samedi 28 mars 2009
Statut
Membre
Dernière intervention
4 mai 2021
36
Décidément...

En gros si je résume, il faudrait ajouter à cette commande :
move "%%a" "%dir%!dest!"

Un caractère joker ("*" ?) pour lui dire que le répertoire de destination commence effectivement par les 3 premiers chiffres du nom du fichiers, mais se termine différemment