[Résolu] Classer des fichiers dans des dossiers

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
manudk
Batcheur occasionnel
Messages : 2
Enregistré le : 22 oct. 2010 11:42

[Résolu] Classer des fichiers dans des dossiers

Message par manudk »

Bonjour à tous,
je "bidouille" pas mal de trucs simples en batch, mais je suis maintenant confronté à un problème un peu plus ardu qui m'amène à faire appel à l'équipe.
En résumé:
je dois copier un grand nombre de fichiers .zip de type "Sheets" (+- 30.000, placés dans le rep 1_SheetsToMerge) vers des répertoires spécifiques ("Divs" sous 2_DivsToMerge) en fonction de leur appartenance à une catégorie. Cette catégorie est déterminée par les 5 prem. positions du nom du fichier. Cette partie du travail est résolue.
Voici le code:

Code : Tout sélectionner

@echo off
setlocal enabledelayedexpansion
setlocal enableextensions
set/a s1=0
set workpath=%CD%
set divstomerge=%CD%\2_DivsToMerge
cd 1_SheetsToMerge
for %%S in (*.zip) do (
set sheetname=%%S
set divname=!sheetname:~0,5!
set dirname=!divstomerge!\!divname!
if not exist !dirname! MKDIR !dirname!
copy !sheetname! !dirname!
set/a s1+=1
) 
echo.sheets transferred:%s1%
pause
endlocal
exit
 
Après un traitement spécifique sur ces fichiers, je retrouve en sortie 1 seul fichier par catégorie, ce qui m'en fait encore +- 3600.
Je dois maintenant reclasser et donc copier dans des nouveaux sous-répertoires ces fichiers, mais le nom du nouveau répertoire ne se retrouve pas dans le nom du fichier! Par contre, j'ai un fichier .txt qui contient tous les noms de fichier générés par mon premier batch, suivi du nom de la nouvelle catégorie.
En final, j'aurais+- 600 nouvelles catégories. Un dernier traitement va créer 600 nouveaux fichiers sur base des 3600 reclassés.
Un petit exemple vaut mieux qu'un long discours:
Au départ, fichiers dans Sheets_To_Merge:
11001A010000.zip
11001A020000.zip
12000A010000.zip
12000A020000.zip
13000A000000.zip
13000B000000.zip

Après mon premier .bat,
création de 3 nouveaux répertoires 11001, 12000 et 13000 qui contiennent les 2,2 et 3 fichiers concernés.

Mon traitement spécial (pas du .bat!) va créer dans un nouveau répertoire, pour chaque sous-répertoire de type 11001, 12000, .., un seul fichier appelé 11001.zip, 12000.zip, ....

Le .bat que je cherche à faire maintenant doit envoyer ces nouveaux .zip dans des sous-répertoires en fonction de leur appartenance à une supra-catégorie.
J'ai un fichier .txt de 3600 lignes qui ressemble à ca:
11001;VILLE_UN
12000.VILLE_UN
13000;VILLE_DEUX
....

et donc en final, je devrais avoir - un répertoire nommé VILLE_UN qui contient 11001.zip et 12000.zip
- un répertoire nommé VILLE_DEUX qui contient 13000.zip.
... etc

Je suppose que ce .bat va combiner des FOR avec /tokens et des FIND, mais ma limite de compétence est atteinte.

Mon dernier traitement créera des nouveaux fichiers VILLE_UN.zip, VILLE_DEUX.zip, ...

Merci pour votre aide et n'hésitez pas à demander des infos complémentaires.

PS je suis absent du boulot àpd de ce vendredi 12h jusqu'à lundi 07h30.
Modifié en dernier par manudk le 18 nov. 2010 12:26, modifié 1 fois.
manudk
Batcheur occasionnel
Messages : 2
Enregistré le : 22 oct. 2010 11:42

Re: Classer des fichiers dans des dossiers

Message par manudk »

OK, le problème est résolu avec des For imbriqués et un Find.
Merci à ceux qui m'ont lu.
Répondre