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 :

Copier-coller des fichiers à partir d'un listing.txt


Sujet :

Scripts/Batch

  1. #1
    Membre du Club Avatar de Gizmil
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Points : 60
    Points
    60
    Par défaut Copier-coller des fichiers à partir d'un listing.txt
    Salut,

    Je me permet de venir ici chercher un peu d'aide, en espérant que vous pourrez m'aider à surmonter mon souci !

    A noter : je n'ai aucune connaissance dans le domaine de la programmation batch. Moi, mon secteur concernant la programmation, c'est l'AS et PHP (et encore, je balbutie).

    Mais je fais de gros travaux de composition à partir de listes de photos et j'essaye de trouver des astuces afin d'améliorer mon temps de travail alors je me suis dis que vous pourriez peut-être me donner un petit coup de pouce ?

    Voilà, régulièrement, je dois faire cette manipulation : j'ai un ensemble de plusieurs milliers de fichiers jpg dans un dossier que je nommerais "dossier A". A côté de ça, dans un txt, j'ai une liste de 300 noms de fichiers jpg. Celle liste m'indique les fichiers à sélectionner dans mon dossier A afin de les isoler dans un dossier vierge que je nommerais "dossier B".

    La sélection manuelle des mes fichiers jpg dans le dossier A pouvant parfois prendre beaucoup de temps, je me demandais si quelqu'un ne pourrait pas m'indiquer un petit script qui me permettrait d'aller chercher ces fichiers-là automatiquement dans mon dossier A en s'appuyant sur la liste dont je dispose pour aller ensuite les coller dans le dossier B ?

    PS : A moins qu'il existe des logiciels qui permettent ce genre de manipulation ?

    Le souci : la plupart du temps, je ne dispose pas du nom entier des fichiers à sélectionner dans le dossier. Habituellement, j'ai une liste de ce type :

    5486
    2563
    7894
    1235
    4256

    et les fichiers à sélectionner sont sous cette forme :

    IMG_5486.JPG
    IMG_2563.JPG
    IMG_7894.JPG
    IMG_1235.JPG
    IMG_4256.JPG

    Est-il possible de faire qqch pour moi ? Y a t-il une solution pas trop complexe à réaliser ?

    En tous les cas, merci d'avance pour l'aide que vous pourrez m'apporter !

  2. #2
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Salut,

    Essaye de faire un début de script en t'aidant des commandes/instructions "for" "dir" "findstr". Tu peux utilement te référer au cours en ligne et à la FAQ pour cela (conf épinglés).

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2011
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 223
    Points : 294
    Points
    294
    Par défaut
    salut,

    quelque chose dans ce genre peut-être:

    Code : 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
    
    echo ------------------
    echo Copie de fichiers
    echo ------------------
    echo.
    
    set chemin_dossier_A=C:\Users\gizmil\DOSSIERA
    set chemin_dossier_B=C:\Users\gizmil\DOSSIERB
    
    for /f %%i in (liste.txt) do (
    	if not exist "%chemin_dossier_B%\IMG_%%i.jpg" (
    		xcopy "%chemin_dossier_A%\IMG_%%i.jpg" "%chemin_dossier_B%\" /s/e/i/f >nul 2>&1
    		if %errorlevel% EQU 0 (
    			echo Fichier IMG_%%i.jpg OK
    		) else (
    			echo Impossible de copier le fichier IMG_%%i.jpg
    		)
    	) else (
    		echo Le fichier IMG_%%i.jpg est deja present dans le répertoire cible
    	)
    )
    
    echo.	
    PAUSE
    A noter que ce fichier batch doit etre dans le meme repertoire que le fichier liste.txt listant les fichiers à copier...

  4. #4
    Membre régulier Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par ludo40190 Voir le message
    salut,

    quelque chose dans ce genre peut-être:

    Code : 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
    
    echo ------------------
    echo Copie de fichiers
    echo ------------------
    echo.
    
    set chemin_dossier_A=C:\Users\gizmil\DOSSIERA
    set chemin_dossier_B=C:\Users\gizmil\DOSSIERB
    
    for /f %%i in (liste.txt) do (
    	if not exist "%chemin_dossier_B%\IMG_%%i.jpg" (
    		xcopy "%chemin_dossier_A%\IMG_%%i.jpg" "%chemin_dossier_B%\" /s/e/i/f >nul 2>&1
    		if %errorlevel% EQU 0 (
    			echo Fichier IMG_%%i.jpg OK
    		) else (
    			echo Impossible de copier le fichier IMG_%%i.jpg
    		)
    	) else (
    		echo Le fichier IMG_%%i.jpg est deja present dans le répertoire cible
    	)
    )
    
    echo.	
    PAUSE
    A noter que ce fichier batch doit etre dans le meme repertoire que le fichier liste.txt listant les fichiers à copier...

    Très joli code,
    je trouve bien d'avoir pensé a vérifier la présence du fichier et vérifier le bon déroulement de la copie.
    je me permettrai juste de faire un petit complément, en améliorant la flexibilité du code ainsi qu'en éditant un rapport imprimable.

    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    @echo off
    
    echo ------------------
    echo Copie de fichiers
    echo ------------------
    echo.
    
    rem --- on vient chercher dans un fichier config.ini les information
    rem --- concernant les dossier A B chemin du fichier txt et du rapport
    
    for /f "tokens=1,2 delims==" %%i in ('findstr /b /c:"chemin_dossier_A=" config.ini') do set chemin_dossier_A=%%j
    for /f "tokens=1,2 delims==" %%i in ('findstr /b /c:"chemin_dossier_B=" config.ini') do set chemin_dossier_B=%%j
    for /f "tokens=1,2 delims==" %%i in ('findstr /b /c:"chemin_fichier_txt=" config.ini') do set chemin_fichier_txt=%%j
    for /f "tokens=1,2 delims==" %%i in ('findstr /b /c:"chemin_rapport_txt=" config.ini') do set chemin_rapport_txt=%%j
    
    rem --- on a rajouter le chemin pour le fichier liste.txt
    rem --- on rajoute l'enregistrement dans le rapport.txt
    
    for /f %%i in (%chemin_fichier_txt%\liste.txt) do (
    	if not exist "%chemin_dossier_B%\IMG_%%i.jpg" (
    		xcopy "%chemin_dossier_A%\IMG_%%i.jpg" "%chemin_dossier_B%\" /s/e/i/f >nul 2>&1
    		if %errorlevel% EQU 0 (
    			echo Fichier IMG_%%i.jpg OK >>%chemin_rapport_txt%\rapport.txt
    		) else (
    			echo Impossible de copier le fichier IMG_%%i.jpg >>%chemin_rapport_txt%\rapport.txt
    		)
    	) else (
    		echo Le fichier IMG_%%i.jpg est deja present dans le répertoire cible >>%chemin_rapport_txt%\rapport.txt
    	)
    )
    
    rem --- on ouvre le rapport.txt
    
    start %windir%\system32\notepad.exe %chemin_rapport_txt%\rapport.txt

    dans le fichier config.ini on va mettre ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    chemin_dossier_A=c:\photos
    chemin_dossier_B=c:\photos_triées
    chemin_fichier_txt=c:\
    chemin_rapport_txt=c:\

    On pourrait même se permettre de mettre dans le code quelques ligne demandant le chemin des différents dossiers, plutôt que de les inscrire dans un fichier config.ini

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    set /p chemin_dossier_A=%sChoice% Chemin Dossier A:
    set /p chemin_dossier_B=%sChoice% Chemin Dossier B:
    set /p chemin_fichier_txt=%sChoice% Chemin Fichier Listing:
    set /p chemin_rapport_txt=%sChoice% Chemin Fichier Rapport:
    Et voila.
    En espérant avoir répondu a tes attentes.

    Bonne journée

  5. #5
    Membre à l'essai
    Homme Profil pro
    Photographe
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Hello hello
    Je suis confus d'être aussi débutant (et de ne pas avoir encore pris le temps de me présenter...) mais voici ma petite requête.
    J'ai repris les différentes versions de fichier batch pour les utiliser : c'est exactement ce que je cherchais à faire. Et cela va me faire gagner un temps fou.
    Je suis photographe pour des maisons de ventes aux enchères et je m'occupe de mettre les ventes en ligne.
    Toutes mes photos sont rangées dans un photothèque sur un NAS avec une nomenclature du type : 1234-56.jpg
    Lorsque je recois le fichier de la vente, une des colonne nomme la photo et je dois aller les chercher dans la base pour la mise en ligne.
    Avec un fichier batch, il devient inutile de le faire à la main et mieux, j'ai un rapport des manquants.
    Nom : Capture.JPG
Affichages : 1903
Taille : 203,5 Ko
    j'ai donc commencé par utiliser le fichier de gauche, version où il faut renseigner les différents chemins avant le lancer.
    Miracle, cela fonctionne
    Puis je me suis dit que ma source étant toujours la même et que mon dossier de fichiers extraits pouvait aussi toujours être le même, je pouvais utiliser le fichier à droite sur la capture (et son fichier config.ini)
    Et la, cela ne marche plus. La lecture de la liste est bonne mais la copie ne se fait pas...
    J'ai raté un truc ?
    Autre question annexe : il arrive que pour un même objet, j'ai plusieurs photos qui ont alors la nomenclature 1234-56 (1).jpg ou encore 1234-56_1.jpg
    Comment faire pour que ces fichiers soient aussi extraits ?

    Mille mercis pour vos précieux éclairages... Je vous l'ai dit, je débute (mais en général j'apprends vite...)

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 198
    Points : 5 788
    Points
    5 788
    Par défaut
    Gizmil = maxipadfrombagdad ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Photographe
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Gizmil = maxipadfrombagdad ?
    Non je ne crois pas... je suis nouveau !

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 198
    Points : 5 788
    Points
    5 788
    Par défaut
    Voici mon approche de la question pour vous deux alors (je fait un rapport puisque cela semble vous intéresser) :

    Code batch : 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
    26
    27
    @echo off
    cls
     
    echo ------------------
    echo Copie de fichiers
    echo ------------------
    echo.
     
    set "chemin_dossier_A=C:\Dossier_A"
    set "chemin_dossier_B=C:\Dossier_B"
     
    if exist "rapport.txt" del "rapport.txt" /f
     
    for /f "tokens=* usebackq" %%a in (liste.txt) do (
    	echo Traitement de %%~a >con
    	for /f "tokens=*" %%b in ('dir "%chemin_dossier_A%\*%%~a*.*" /b 2^>nul') do (
    		if exist "%chemin_dossier_B%\%%~b" (
    			echo %%~b : Deja present dans le repertoire cible
    		) else (
    			copy /Y "%chemin_dossier_A%\%%~b" "%chemin_dossier_B%\%%~b" 1>nul 2>&1 &&(echo %%~b : Copie OK)||(echo %%~b : Impossible de copier le fichier)
    		)
    	)
    )>>rapport.txt
     
    echo.	
    pause
    exit

  9. #9
    Membre à l'essai
    Homme Profil pro
    Photographe
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut batch copie fichier encore et toujours
    Tout d'abord un immense merci à ceux qui prennent le temps de me répondre.
    J'ai donc testé (et essayé de comprendre la nomenclature du script) proposé. Mais encore une fois je débute...

    Avec dernière cette version, si je demande les images 1234-5.jpg, je souhaite avoir aussi (si elles existent) les dérivées 1234-5 (1).jpg et/ou 1234-5_1.jpg

    Or ici toutes les images "contenant" 1245-6.jpg apparaissent : 1234-5.jpg, 1234-51.jpg ou encore 1234-512.jpg ce qui n'est pas le but... :-)

    Et j'ai toujours ce problème : le script fonctionne si tous les dossiers sont en local mais plus lorsque j'interroge le dossier réseau (sur un NAS SYNOLOGY) de ma photothèque, la copie ne se fait plus.
    C'est d'autant plus étrange que si j'utilise le script qui propose à l'utilisateur de rentrer les chemins à chaque fois, cela fonctionne.

    J'en perds mon latin... et mon DOS...

    Bien à vous

    Maxime

  10. #10
    Membre à l'essai
    Homme Profil pro
    Photographe
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut Complément à mon post précédent
    Hello Hello à nouveau
    Je crois avoir trouvé la solution pour le disque réseau : j'ai supprimé les espaces et les accents dans les noms de fichier, je pense qu'il y avait un problème de codage et cela fonctionne !

    Je vais donc essayer de trouver la solution pour ma recherche affinée mais si vous avez des idées, vous irez certainement infiniment plus vite que moi...

    Bien à vous

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 198
    Points : 5 788
    Points
    5 788
    Par défaut
    si je demande les images 1234-5.jpg
    les dérivées 1234-5 (1).jpg et/ou 1234-5_1.jpg
    toutes les images "contenant" 1245-6.jpg apparaissent : 1234-5.jpg, 1234-51.jpg ou encore 1234-512.jpg ce qui n'est pas le but
    Comprend pas, 1234-5 (1).jpg et 1234-5_1.jpg seraient des dériver mais pas 1234-5.jpg, 1234-51.jpg ou encore 1234-512.jpg

    si tu met le motif 1234-5 tous ce qui contient ce texte sera traité.



    il arrive que pour un même objet, j'ai plusieurs photos qui ont alors la nomenclature 1234-56 (1).jpg ou encore 1234-56_1.jpg
    Tu met 1234-56 en recherche

  12. #12
    Membre à l'essai
    Homme Profil pro
    Photographe
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut batch copie toujours...
    Pardon je crains de ne pas avoir été très clair.

    Dans ma photothèque, les fichiers ont cette structure 1234-5.jpg où "1234" correspond à un numéro de vendeur et "5" au numéro de lot de ce vendeur.

    Si un objet est plus important (et plus cher...) on fait plusieurs photos qui ont alors la nomenclature 1234-5 (1).jpg ou bien la nomenclature 1234-5_1.jpg

    Lorsque, pour une vente, je dois aller chercher dans la photothèque les images qui vont illustrer chaque lot, il faut que sorte
    - le 1234-5.jpg
    - le ou les 1234-5 (X).jpg OU le 1234-5 _X.jpg s'ils existent

    Mais PAS les 1234-51.jpg, 1234-52.jpg, 1234-501.jpg etc qui ne sont pas les mêmes objets...

    Par exemple 1234-5 sera une pendule du XVIIIe, 1234-5_1 sera un détail du mouvement, 1234-5_2 sera un détail de la ciselure du bronze (même objet)
    alors que 1234-51 est un tout autre objet qui ne devrait pas sortir de ce tri/copie

    Si vous avez une idée, ce serait formidable !

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 198
    Points : 5 788
    Points
    5 788
    Par défaut
    Or ici toutes les images "contenant" 1245-6.jpg apparaissent : 1234-5.jpg, 1234-51.jpg ou encore 1234-512.jpg ce qui n'est pas le but... :-)
    Je ne vois pas de 12345-6 dans cette liste.


    1234-5_1.jpg ne correspond pas à 1234-5 _X.jpg


    Ta demande commence à dériver sérieusement de celle d'origine pour laquelle la solution fonctionne
    Le souci : la plupart du temps, je ne dispose pas du nom entier des fichiers à sélectionner dans le dossier. Habituellement, j'ai une liste de ce type :

    5486
    2563
    7894
    1235
    4256

    et les fichiers à sélectionner sont sous cette forme :

    IMG_5486.JPG
    IMG_2563.JPG
    IMG_7894.JPG
    IMG_1235.JPG
    IMG_4256.JPG
    Pour ton besoin j'utiliserais PowerShell pour plus de ... tout

  14. #14
    Membre à l'essai
    Homme Profil pro
    Photographe
    Inscrit en
    Mai 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2020
    Messages : 8
    Points : 11
    Points
    11
    Par défaut Merci
    Non le premier script ne règle pas mon problème

    Mais j'ai déjà assez abusé de votre temps

    Merci quand même !

Discussions similaires

  1. [XL-2010] Macro pour renommer des fichiers à partir d'une liste de nom de fichiers
    Par thomahh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/01/2013, 17h03
  2. Copier-coller des fichiers à partir d'un listing.txt
    Par Gizmil dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 21/09/2011, 15h23
  3. Copier/coller des informations à partir d'une boucle
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/07/2009, 09h21
  4. Copier/coller des fichiers d'un dossier à un autre.
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/01/2009, 09h00
  5. Réponses: 3
    Dernier message: 10/01/2008, 10h12

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