Déplacer 13000 fichiers selon leur nom

joachim33 Messages postés 5 Statut Membre -  
joachim33 Messages postés 5 Statut Membre -
Bonjour à tous,

J'ai un souci avec mon .bat... Je vous expose tout ça.

Des fichiers .PCL sont générés automatiquement, et mis dans le répertoire H:\prot\archive du serveur Win 2003.
Ces fichiers ont un nom qui comprend 2 digits pour l'année, suivis de 2 digits pour le mois. Après, le reste du nom ne m'intéresse pas. Cela donne des noms comme 9506*.PCL, etc (Les années vont de 1995 à 2008)
J'ai réussi la première partie de mon .bat qui crée les répertoires + sous rep mensuels dans lesquels je veux transférer mes fichiers :

@echo off
cls
echo on
cd H:\prot\archive\
For %%Y in (95 96 97 98 99 00 01 02 03 04 05 06 07 08) do (
if not exist H:\prot\archive\%%Y (
MKDIR H:\prot\archive\%%Y
For %%M in (01 02 03 04 05 06 07 08 09 10 11 12) do (
MKDIR H:\prot\archive\%%Y\%%M)

Là où ça coince, c'est quand j'essaie de faire un move de mes quelques 13000 fichiers dans les répertoires dédiés

@echo off
cls
echo on
cd C:\prot\archive\
For %%Y in (95 96 97 98 99 00 01 02 03 04 05 06 07 08) do (
if not exist C:\prot\archive\%%Y (
MKDIR C:\prot\archive\%%Y
For %%M in (01 02 03 04 05 06 07 08 09 10 11 12) do (
MKDIR C:\prot\archive\%%Y\%%M
pause
pushd C:\prot\archive\
if exist %%Y%%M*.PCL (
Echo Tri en cours...
move C:\prot\archive\%%Y%%M*.PCL C:\prot\archive\%%Y\%%Y%%M*.PCL
popd
))))

Mon programme ne plante plus sans raison, mais il ne fait rien de particulier non plus...

Pouvez-vous me dire ce qui coince dans ma syntaxe ?
Un grand merci à tous
Joachim33
A voir également:

4 réponses

dubcek Messages postés 18786 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
hello
hypothèse
if exist %%Y%%M*.PCL ...
exist attend 1 nom de fichier, or avec * il peut y en avoir plusieurs, faire une boucle ?
for /f %%f in (%%Y%%M*.PCL) do
1
joachim33 Messages postés 5 Statut Membre
 
Hello Dubcek,

Je viens de tester, mais je crois que je n'y suis pas encore :

@echo off
cls
echo on
cd C:\prot\archive\
For %%Y in (95 96 97 98 99 00 01 02 03 04 05 06 07 08) do (
if not exist C:\prot\archive\%%Y (
MKDIR C:\prot\archive\%%Y
For %%M in (01 02 03 04 05 06 07 08 09 10 11 12) do (
MKDIR C:\prot\archive\%%Y\%%M
pushd C:\prot\archive\
For /F %%F in (%%Y%%M*.PCL) do (
Echo Tri en cours...
move C:\prot\archive\%%Y%%M*.PCL C:\prot\archive\%%Y\%%M\%%Y%%M*.PCL
popd
))))
pause


Voici un extrait de la console :

C:\prot\archive>(if not exist C:\prot\archive\07 (
MKDIR C:\prot\archive\07
For %M in (01 02 03 04 05 06 07 08 09 10 11 12) do (
MKDIR C:\prot\archive\07\%M
pushd C:\prot\archive\
For /F %F in (07%M*.PCL) do (
Echo Tri en cours...
move C:\prot\archive\07%M*.PCL C:\prot\archive\07\%M\07%M*.PCL
popd
)
)
) )

Il manque encore un petit quelque chose ?

Merci
0
joachim33 Messages postés 5 Statut Membre
 
Hé hé ça sent la solution ça...
C'est que je tâtonne encore beaucoup...
Merci beaucoup Dubcek, je teste ça tout de suite et reviens avec le résultat.

Joachim33
0
joachim33 Messages postés 5 Statut Membre
 
J'ai modifié le H:\ en C:\ pour tester en local sur ma machine, en reproduisant les répertoires et quelques fichiers....
0
joachim33 Messages postés 5 Statut Membre
 
Bon bin ... je vais passer au vbs je crois.
Merci pour la boucle Dubcek
0