[MS-DOS] Regroupement de fichiers

Résolu/Fermé
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 - 19 mai 2008 à 22:49
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 - 22 mai 2008 à 22:52
Bonjour,

Je souhaiterais copier de manière automatique des fichiers contenus dans plusieurs répertoires (et sous-répertoires) vers un seul répertoire.

Par exemple, passer de :
...\Répertoire1\Sousrépertoire1\Quelques.fichiers
...\Répertoire1\Sousrépertoire2\Quelques.fichiers
...\Répertoire1\Sousrépertoire3\Quelques.fichiers
...\Répertoire1\Sousrépertoire4\Quelques.fichiers
...\Répertoire2\Sousrépertoire1\Quelques.fichiers
...\Répertoire2\Sousrépertoire2\Quelques.fichiers
...\Répertoire2\Sousrépertoire3\Quelques.fichiers
...\Répertoire3\Sousrépertoire1\Quelques.fichiers
...\Répertoire3\Sousrépertoire2\Quelques.fichiers
...\Répertoire3\Sousrépertoire3\Quelques.fichiers
...\Répertoire3\Sousrépertoire4\Quelques.fichiers
...\Répertoire3\Sousrépertoire5\Quelques.fichiers
etc

à :
...\Répertoire\Tousmes.fichiers


J'ai déjà beaucoup cherché mais, étant donné que je ne sais pour l'instant utiliser que MS-DOS (et TI-Basic >_<), je n'ai rien trouvé de concret.

Donc si quelqu'un pouvait m'éclairer un peu...
Et, si possible, en DOS car j'aimerais pouvoir réutiliser cette commande dans un fichier Batch.

Merci par avance,
PHF.



PS : j'avais tout de même réussi à bidouiller un truc qui utilise WinRAR pour pallier à une urgence mais je trouve ca vraiment trop lourd, surtout pour une tache quotidienne et qui parait si simple au premier coup d'oeuil.
A voir également:

17 réponses

PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
20 mai 2008 à 17:47
Pour ce qui est des noms de fichiers à regrouper, je sais simplement qu'on peut utiliser le caractère générique * pour remplacer des chaines de caractères.
Par exemple *.gif pointera vers tous les fichiers gif (ce qui m'interesse en l'occurance), *.* pointera vers tous les fichiers ou encore k*.bat pointera vers les fichiers Batch commençant par k.

On peut également utiliser une ou plusieurs fois ? pour remplacer un seul caractère à chaque fois et non une chaine.

Malheureusement, ces caractères génériques ne peuvent pas être utilisés dans les noms de répertoire et sous-répertoires...d'ou mon problème...

J'espère avoire répondu à ta question.

Mon problème, quant à lui, reste intact...
1
regarde la fonction xcopy sous dos

C:\>xcopy /?
Copie des fichiers et des arborescences de répertoires.

XCOPY source [destination] | /M [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:fich1[+fich2][+fich3]...]

source Spécifie le ou les fichiers à copier.
destination Spécifie l'emplacement et/ou le nom de nouveaux fichiers.
/A Copie uniquement les fichiers ayant l'attribut archive, ne
modifie pas l'attribut.
/M Copie uniquement les fichiers ayant l'attribut archive,
désactive l'attribut archive.
/D : j-m-a Copie les fichiers modifiés à partir de la date spécifiée.
Si aucune date n'est donnée, copie uniquement les fichiers dont
l'heure source est plus récente que l'heure de destination.
/EXCLUDE:fich1[+fich2][+fich3]...
Spécifie une liste de fichiers contenant des chaînes. Chaque
chaîne doit être placée sur une ligne séparée dans le fichier.
Lorsque l'une des chaînes se retrouve dans le chemin d'accès
absolu du fichier devant être copié, ce fichier est exclu de la
copie. Par exemple, spécifier une chaîne telle que \obj\ ou .obj
exclura respectivement tous les fichiers situés sous le
répertoire obj ou tous les fichiers dont l'extension est .obj.
/P Avertissement avant la création de chaque fichier de destination.
/S Copie les répertoires et sous-répertoires à l'exception des
répertoires vides.
/E Copie les répertoires et sous-répertoires, y compris les
répertoires vides.
Identique à /S /E. Peut être utilisé pour modifier /T.
/V Vérifie chaque nouveau fichier.
/W Vous demande d'appuyer sur une touche avant la copie.
/C Continuer la copie même si des erreurs se produisent.
/I Si la destination n'existe pas et que plus d'un fichier est
copié, considérer la destination comme devant être un répertoire.
/Q N'affiche pas les noms de fichiers lors de la copie.
/F Affiche les noms de source et de destination complets lors de la
copie.
/L Affiche les fichiers devant être copié.
/G Permet la copie des fichiers cryptés vers des destinations qui
ne prennent pas en charge le cryptage.
/H Copie également les fichiers cachés et les fichiers système.
/R Remplace les fichiers en lecture seule.
/T Crée la structure de répertoires mais ne copie pas les fichiers.
N'inclut pas les répertoires ou sous-répertoires vides. /T /E
incluent les répertoires et sous-répertoires vides.
/U Copie seulement les fichiers existants déjà dans la destination.
/K Copie les attributs. La commande normale Xcopy rétablira les
attributs de lecture seule.
/N Copie en utilisant les noms courts générés.
/O Copie les fichiers d'appartenance et les informations d'ACL.
/X Copie les paramètres d'audit de fichiers (implique /O).
/Y Supprime la demande de confirmation de remplacement de
fichiers de destination existants.
/-Y Provoque la demande de confirmation de remplacement d'un fichier
de destination existant.
/Z Copie les fichiers du réseau en mode redémarrable.

Le commutateur /Y peut être présent dans la variable d'environnement COPYCMD.
Il peut être remplacée par /-Y dans la ligne de commande.
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
19 mai 2008 à 22:57
Merci d'avoir répondu si vite mais j'ai déjà essayé maintes et maintes fois de tourner XCOPY dans tous les sens et impossible d'arriver à mes fins.
Peut-être que j'ai loupé quelque chose mais je ne vois pas trop ce que ca peut être...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
20 mai 2008 à 01:58
Bonjour,

Indépendamment des noms des répertoies et sous répertoires, y-a-t-il un moyen d'identifier de manière univoque les fichiers à regrouper (l'extension par exemple) ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
20 mai 2008 à 18:50
Bonjour,

Non, je voulais savoir si dans les chaînes de caractères identifiant les fichiers à regrouper (leur nom) il y avait une constante permettant de les identifier par exemple :
fichabcd.reg
abcdfich.reg
xyz.reg
................
Il devient alors possible (dans cette illustration) de les localiser en utilisant l'extension (.reg) comme critère de recherche (tu parles de .gif ?). A condition bien sûr qu'elle ne soit pas utilisée par d'autres fichiers n'ayant rien à voir avec le regroupement.
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
20 mai 2008 à 21:01
*mauvaise manipulation*
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
20 mai 2008 à 21:07
Désolé mais je n'avais pas compris ta question précédente et ai donc déballé tout ce que je savais (une bonne partie de mes connaissances actuelles) alors que tu sais surement tout ca très bien...

Bref.
Pour répondre à ta question (cette fois c'est la bonne), tous les fichiers à regrouper sont des .gif et il n'y a parmi eux aucun .gif indésirable. Donc oui, en recherchant tous les .gif des répertoires/sous-répertoires en question on tombe sur tous les fichiers à regrouper.

Merci de t'occuper de mon problème, je suis impatient de connaitre la solution !
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
21 mai 2008 à 00:08
Bonsoir,

Je te livre ce qui suit, je l'ai "construit" à partir d'un existant, dis moi si ça correspond à ton attente.

Appel : nom extension ex: CPYFICH gif (Attention à ne pas mettre le point!!!!)

    ECHO OFF
    

SETLOCAL ENABLEdelayedExpansion
SETLOCAL ENABLEextensions
        CLS

rem     répertoire de travail (contient notamment ce fichier.) :
        CD C:\Documents and Settings\Christian\Mes documents\BATCH_files


rem ----------------------------------------------------------------------------
rem                          SEQUENCE PRINCIPALE
rem ----------------------------------------------------------------------------

        CALL         :DEFINIT_VAR     %0

rem     Fichier de sortie pour controles (idem sortie écran)
        IF  EXIST    "%nomF_OUT%" 	            ( ERASE   %nomF_OUT% )

        SET "param_1=C:\"
        SET "param_2=%1"

        FOR              /R   "%param_1%"       %%F  IN  (*.%param_2%) DO     (
            SET               "nom_ext=%%~nxF"
            CALL              :ECRITURE_REPER "%%F"     !nom_ext!          
            CALL              :ECRITURE_MATCH "%%F"     !nom_ext!          )
         
      	ENDLOCAL
      	
        GOTO                                            :EOF

rem ----------------------------------------------------------------------------

:DEFINIT_VAR

        SET           "nom_pgm=%1"
        SET  	      "nomF_OUT=%USERNAME:~0,+3%-forumA-OUT.txt"
        SET           "marge_cons=-     "
        SET       /A    no_fichiers_match=0

        SET "interlign=------------------------------------------------------"
        SET "interlign=%interlign%------------------------"
        SET "interlign1=------------------------------------------------------"
        SET "interlign1=%interlign1%----------------------"

        GOTO                                            :EOF
rem -----------------FIN : DEFINIT_VAR

:ECRITURE_REPER

 rem  echo %1
 rem   Ici le nom de mon répertoire pour effectuer mes tests. A actualiser !!!!
 
 rem Mets l'ordre COPY en commentaire dans un 1er temps pour contrôler à l'écran
 rem  COPY   /A %1 "C:\Documents and Settings\Christian\Mes documents\a1" /V

rem pause


        GOTO                                            :EOF
rem -----------------FIN : ECRITURE_REPER


:ECRITURE_MATCH

rem     Extraction (à partir du nom du chemin) de la partie générique constituée
rem     des répertoires\dossiers situant le fichier.

        SET       /A    no_fichiers_match+=1

        SET   chemin=%1
        SET   chemin=!chemin:"=!
        SET   chemin=!chemin:%2=!
        SET   chemin_complet=%1
        SET   chemin_complet=!chemin_complet:"=!

rem     Ecriture dans le fichier et affichage à la console des données identi-
rem     fiant chaque égalité trouvée.

        ECHO !no_fichiers_match:~-4!!interlign1!                 >> %nomF_OUT%
        ECHO {a} !nom_ext!                                       >> %nomF_OUT%
        ECHO {b} !chemin!                                        >> %nomF_OUT%
        ECHO {c} !chemin_complet!                                >> %nomF_OUT%
        ECHO %interlign%--                                       >> %nomF_OUT%
        ECHO %marge_cons%
        ECHO %marge1_cons%!no_fichiers_match:~-4! !interlign!
        ECHO %marge_cons%!nom_ext!
        ECHO %marge_cons%!chemin!
        ECHO %marge_cons%!chemin_complet!
        ECHO %marge_cons%%interlign%-

        GOTO                                            :EOF
rem -----------------FIN : ECRITURE_MATCH

:END
	ECHO OFF
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
21 mai 2008 à 02:50
PRECISIONS:

- Ajoute ce test après le 1er IF, sinon c'est parti pour tout le disque C:\...................
        IF   "%1"              ==   ""                                       (
          ECHO  Absence du parametre extension des fichiers a rechercher
          GOTO                                           :EOF                )

De toute façon, dans un cas comme celui-ci, tu peux toujours arrêter le traitement avec "CTRL-C".
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
21 mai 2008 à 14:53
Bonjour,

Merci beaucoup de ton aide !
Ce que tu fais pour moi est énorme !

Mais (oui car il y a un mais) j'ai rencontré plusieurs problème et je n'ai pas pu tous les résoudre :

-> mon nom d'utilisateur Windows XP comporte un accent (pas pratique je sais) et le programme me disait le fichier spécifier est introuvable. J'ai tout déplacé mais sur une autre partition (pourquoi faire simple quand on peut faire compliqué ?)...j'ai donc eu la même erreur car je n'étais plus sur C: (évidemment ! pfff...) . J'ai modifié la lettre de lecteur dans le script et les bons fichiers on alors été détectés. Ouf !

-> j'ai alors enlevé le REM de la ligne COPY et tous le fichiers se sont retrouvés au même endroit (but atteind !). Malheureusement ce n'était qu'un artifice : tous les gifs obtenus font 160 octets et sont biensur impossibles à ouvrir...(Argh !)

Je ne sais pas ce qu'il a bien pu se passer...
Une idée ?

Pour ce qui est du scipt lui même, il m'a fait réaliser à quel point il me manque des connaissances en la matière : la plupart des lignes me semblent très étranges...je ne comprend même pas l'utilité de certaines...
Heureusement qui tu donne pas mal d'indication dans le script sinon je n'aurais même pas pu l'éditer.
Bref. J'ai du boulot. ^^
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
21 mai 2008 à 15:20
Bonjour,

Essaie à nouveau en remplaçant COPY A par COPY B(inaire) (J'aurai dû y penser)

COPY /B %1 "C:\Documents and Settings\Christian\Mes documents\a1" /V

Si tu veux, on commentera le script ..........
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
21 mai 2008 à 16:33
Ca y est ! Ca copie les gif ! Merci !

Je me trouve à présent confronté à un dernier problème : la sélection des fichiers à copier ne se passe plus aussi bien : quand je change le répertoire à scanner (pour ne prendre qu'un seul répertoire par exemple), tous les fichiers sont quand même choisis (même ceux des autres répertoires du même niveau que celui choisi).

J'espère ne pas avoir été trop flou...

Sinon un commentaire du script m'interesserait beaucoup mais je ne veux non plus te prendre la tête avec ette histoire...



EDIT : En fait ca prend tous les gif de ma partition. Peut-etre vaut-il mieux que je recommence à la racine de C: ...

EDIT2 : Même sur C: c'est pareil : ca prend en premier les fichiers dans le répertoire choisi pour le scan et puis ca s'attaque au reste de la partition...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
21 mai 2008 à 17:14
Bonjour,

Oui, le script n'est pas sélectif, il prend tous les .gif de SET "param_1=C:\" ou l'équivalent. Fais un essai en renseignant ce paramètre "param_1" avec le nom du chemin du répertoire à scanner :
SET "param_1=C:\.....\..............\"

Dans cette hypothèse il faudra prévoir une entrée manuelle afin d'éviter cette manip à chaque traitement.
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
21 mai 2008 à 17:38
Parfait !

Tout marche à merveille maintenant, sauf peut-être un autre problème dans les noms de fichiers : les fichiers qui comportent un ! ne sont pas copiés...
Mais bon c'est pas grave, je les renome avant la copie avec un logiciel de renomage en masse et c'est bon.
^^

Merci beacoup !
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
21 mai 2008 à 23:38
Bonsoir,

Pour le caractère / je vais voir si il y a quelque chose que je puisse faire.

Je t'ai fait parvenir un complément d'information par messagerie interne.
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
22 mai 2008 à 18:59
OK

Merci pour tout !
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
22 mai 2008 à 21:07
Bonjour,

Bon courage, à bientôt peut-être sur ce forum.
Pour le slash je ne suis pas parvenu à créer, avec l'explorateur Windows, le cas de figure, je vais essayer autrement.
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
22 mai 2008 à 21:22
Bonsoir,

Il ne s'agissait pas d'un slash mais d'un point d'exclamation mis en italique...
A mon avis il est impossible d'insérer un slash dans un nom de fichier car c'est un caractère assès spécial.

Bonne continuation également,
J'espère que ca ne te dérange pas que je continue à te poser des questions sur le sript via MP...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
22 mai 2008 à 22:48
Non, ça ne me dérange pas, les réponses ne seront peut-être pas toutes immédiates car pour certaines je serai probablement obligé de faire un peu de recherche, mais n'hésite pas à poser des questions ça me permettra de faire un peu de révision.

C'était donc un ! En effet le / ne passe pas ! (Faut paut pas vieillir...... )
0
PHF34 Messages postés 34 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 22 mai 2008 4
22 mai 2008 à 22:52
OK pas de problème !
^^

Encore un fois merci.
Ce n'est pas grave du tout si tu met du temps à répondre car cela ne presse pas. De toute facon je passe mon bac bientot donc j'aurais des périodes d'absence également...
0