IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Copie de fichiers manquants en pagaille. [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut Copie de fichiers manquants en pagaille.
    J'ai une arborescence vaste de dossiers dans lesquels se trouvent des fichiers .TXT.

    Certains fichiers .TXT sont en plusieurs parties dont les noms ressemblent à: "XXXXXXXXX.txt": "XXXXXXXXX.txts"

    Le problème que j'ai c'est que pour que tout fonctionne il faut que tout les fichiers XXXXXXXXX.txt et XXXXXXXXX.X.txts soient réunis.
    Le second problème est que certains fichiers sont éparpillés partout dans l'arborescence en plus d'avoir des copies dans plusieurs dossiers.

    J'aimerais que pour chaque fichier XXXXXXXXX.txt on copie tous les autres XXXXXXXXX.X.txts dans les répertoires où se trouvent XXXXXXXXX.txt.

    Petit schéma:

    XXXXXXXXX.txt se trouve dans C:\dossier\sous-dossier1\ ainsi que C:\dossier\sous-dossier22\ et C:\dossier\sous-dossier1\dossier155\
    J'aimerais trouver tous les XXXXXXXXX.X.txts et les copiés dans C:\dossier\sous-dossier1\ - C:\dossier\sous-dossier22\ et C:\dossier\sous-dossier1\dossier155\

    J'ai une liste (de 103 002 lignes) avec tous les fichiers manquants sous la forme:
    "Error while unpacking 'C:\dossier\sous-dossier1\AAAAA\XXXXXXXXX.txt': XXXXXXXXX.X.txt not found"
    Sachant que XXXXXXXXX.X.txt peut se trouver dans plusieurs lignes car plusieurs dossiers, ma liste peut ressembler à:
    "Error while unpacking 'C:\dossier\sous-dossier1\AAAAA\XXXXXXXXX.txt': XXXXXXXXX.X.txt not found
    Error while unpacking 'C:\dossier\sous-dossier1\BBBBB\XXXXXXXXX.txt': XXXXXXXXX.X.txt not found"
    etc...

    J'aimerais donc copier "XXXXXXXXX.X.txt" dans "C:\dossier\sous-dossier1\AAAAA\" et "C:\dossier\sous-dossier1\BBBBB\".

    Je ne sais pas si je suis assez clair mais je me prend la tête depuis trois jours (cf: mes posts précédents) dessus, je code de façon très sale et j'en ai marre.

    Voila, voila, si quelqu'un se sent courageux, please help (il gagnera un gros câlin avec plein de bytes! ) ^^
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    perso je ferais premièrement un fichier d'index avec tous les fichiers de ton arborescence :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (for /f "delims=" %%a in ('dir /s/b') do echo %%a) >index.txt
    Ainsi on peut facilement retrouver le chemin de n'importe quelle fichier.

    A partir de là c'est facile :

    1 - On parse le fichier log d'erreur (le fameux de 103 002 Lignes)
    Pour récuperer le fichier manquant et le repertoire de destination de ce fichier manquant :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    setlocal enabledelayedexpansion
     
    for /f "tokens=2,3,4 delims=':" %%a in (103200.txt) do (
         set "$Destination_Dir=%%a:%%~pb"
    	 set "$To_Find_File=%%c"
    	 set "$To_Find_File=!$To_Find_File: not found=!"
    	 call:FindAndCopy "!$Destination_Dir!" "!$To_Find_File:~1!"
    	 )
     
    echo C'est fini DevilSnake
    exit/b
     
    :FindAndCopy
    Echo On va chercher [%~2] et le copier dans [%~1]

    Jusque là ça roule ?

    On continue :

    Maintenant il nous faut savoir ou ce cache le fameux fichier manquant, mais vu que l'on est
    pas si nul que ça on a préalablement créer notre index.txt qui contient tout ce qu'il nous faut on va juste chercher dedans :

    On continue dans notre :FindAndCopy

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    :FindAndCopy
    Echo On va chercher [%~2] et le copier dans [%~1]
     
    for /f "delims=" %%x in ('type index.txt ^| find /i %2') do (
    	Echo On copie [%~2] de [%%x] vers [%~1]
    	goto:eof
    )
     
    Echo [%~2] pas trouv‚

    Et voilà le schema complet si j'ai bien capté ton problème !

    J'ai pas mis la partie faisant la copy ainsi tu peux tester la sortie dans un log ou dans le CMD et ensuite tu rajouteras juste
    la ligne de copy



    Le code complet :
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @echo off
     
    (for /f "delims=" %%a in ('dir /s/b') do echo %%a) >index.txt
     
    setlocal enabledelayedexpansion
     
    for /f "tokens=2,3,4 delims=':" %%a in (index.txt) do (
         set "$Destination_Dir=%%a:%%~pb"
    	 set "$To_Find_File=%%c"
    	 set "$To_Find_File=!$To_Find_File: not found=!"
    	 call:FindAndCopy "!$Destination_Dir!" "!$To_Find_File:~1!"
    	 )
     
    echo C'est fini DevilSnake
    exit/b
     
    :FindAndCopy
    Echo On va chercher [%~2] et le copier dans [%~1]
     
    for /f "delims=" %%x in ('type index.txt ^| find /i %2') do (
    	Echo On copie [%~2] de [%%x] vers [%~1]
    	goto:eof
    )
     
    Echo [%~2] pas trouv‚

    Bien entendue on peu tous faire dans la première boucle. Mais c'est mieux structurer et plus facile a debugger comme ça.

    A tester bien sûr j'ai fait ça en aveugle !!!

    PS : Ça va prendre un peu de temps pour traiter tes 103200 lignes

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Mon ami, laisse moi te dire que je t'aime

    Merci beaucoup!
    Le script est lancé, a l'air de fonctionner, plus qu'à attendre qu'il termine les 679 408 copies restantes à faire...

    Un "câlin" pour te remercier?
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie de fichier sur le bureau
    Par LoicH dans le forum C++Builder
    Réponses: 3
    Dernier message: 01/05/2005, 20h57
  2. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2004, 22h39
  3. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows
    Réponses: 5
    Dernier message: 20/12/2004, 22h35
  4. [Kylix] Copie de fichier...
    Par paty.olivier dans le forum EDI
    Réponses: 1
    Dernier message: 23/06/2004, 12h55
  5. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo