[BATCH] Boucle selon nom de fichier SRC ET nom de dossier DST

Résolu/Fermé
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 - Modifié par Informadream le 17/11/2016 à 16:16
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 - 18 nov. 2016 à 14:13
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

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 nov. 2016 à 11:26
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 nov. 2016 à 12:13
prendre les 3 premiers chiffres et ajouter 000
set dest=!dest:~0,3!000
1
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 39
18 nov. 2016 à 14:13
Yes !!!
Merci mille fois pour ton aide, tout marche impeccable !
Bon weekend :)
0
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 39
17 nov. 2016 à 18:20
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...
0
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 39
18 nov. 2016 à 11:46
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.
0
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 39
18 nov. 2016 à 11:52
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 :)
0
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 39
18 nov. 2016 à 11:55
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".
0
Informadream Messages postés 465 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 9 mars 2022 39
18 nov. 2016 à 12:00
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
0