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 des fichiers sur une clé USB, problème pour le chemin.


Sujet :

Scripts/Batch

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Copier des fichiers sur une clé USB, problème pour le chemin.
    Bonjours à tous!

    J'essaye d'écrire un batch qui copie les images présente sur le disque C sur une clé USB (ici appelé "clé_USB"). Mon problème est que je ne sais pas comment faire pour que la copie se fasse meme si la clé ne correspond pas toujours au même lecteur... (un coup c'est g: et sur un autre PC se sera j: ...)

    mon code actuel qui donc n'est pas du tout polyvalent :

    cls
    @echo off

    REM copie des fichiers de l'extension .jpg

    XCOPY /Q /Y /S /C C:\"*.jpg" "G:\Copie des images"


    Je débute en batch, j'aimerai bien comprendre quelles commande sont à utilisées et pourquoi.
    Merci @+

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    En fait, "tel quel", c'est strictement impossible de savoir quelle est "ta" clé. Une solution simple passe par le fait de lui donner un nom prédéfini et connu à l'avance, ce qui permet alors de retrouver la lettre de lecteur associée.

    Sinon, il te faudra passer par une phase de demande de l'information à l'utilisateur, ce qui bien sûr "casse" l'automatisation de ton batch.

    Tu peux toutefois facilement trouver tous les lecteurs amovible de l'ordinateur via cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /F "tokens=3" %%I in ('echo list volume ^| diskpart ^| find /i "amovible"') do (
      echo %%I => Disque amovible
    )
    Entre les deux parenthèses, la variable %%I contiendra successivement toutes les lettres de lecteurs amovibles, notamment les clés USB. Tu n'auras aucune unité de disque fixe (notamment, tu ne verras pas le disque C), ni aucune unité de CD/DVD.

    Il est évident que si tu ne trouves qu'un seul et unique résultat, tu peux alors automatiser ton batch. Si tu en trouves deux ou plus, c'est à toi de décider ce que tu veux faire au final.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Donc en gros si je suis la méthode que tu explique le for ... do va crée un fichier avec le nom de tous les disques amovibles (1 par ligne), ensuite il faudrait que je repioche dans ce fichier pour donner le chemin de ma clé (c'est pour ca que si il y en a plusieurs ca marche pas). Ne peut on pas faire en sorte que soit aussi inscrit dans le fichier le nom de la clé, pour pouvoir après faire un if qui va chercher son nom?

    Pour ce que tu dis au début je peu donner un nom fixe à ma clé, est il possible après de mettre ce nom à la place du lecteur dans le chemin? J'ai essayé et ça crée un dossier sur le répertoire...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    et bien ce que tu pourais faire comme code ses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cls
    @echo off
    
    REM copie des fichiers de l'extension .jpg
    set /p place Votre lecteur==
    XCOPY /Q /Y /S /C C:\"*.jpg" "%place%:\Copie des images
    comme sa tu va pouvoir mettre la lettre de ton USB et le tour est jouer

  5. #5
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    tu peux aussi crée uan fichier dans ta clef par exemple monsieurY.x puis tester son existance:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for %%a n (c d e f g h i j k l m n o p q r s t u v w x y z) do (
      If exist %%a:\monsieurY.x (ACTION)
    )

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Suite à la réponse de I'm Here j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cls
    @echo off
    
    for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( If exist %%a:\monsieurY.x (xcopy /q /y /s /c c:\"*.jpg" %%a\Copies des images))
    j'obtiens plusieurs erreurs et pour finir "Nombre de paramètres non valide"

    PS : il n'y a pas un paramètre du genre /y pour que l'on ne soit pas obligé de dire "continuer" à chaque erreurs?

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Il est beaucoup, BEAUCOUP plus simple et fiable d'utiliser la boucle for utilisant diskpart que j'ai donnée précédemment plutôt que d'essayer toutes les lettres de lecteurs possible...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    pas tester mais essayes en modifiant ton code ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xcopy /q /y /s /c "c:\*.jpg" "%%a:\Copies des images\"

  9. #9
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Il est beaucoup, BEAUCOUP plus simple et fiable d'utiliser la boucle for utilisant diskpart que j'ai donnée précédemment plutôt que d'essayer toutes les lettres de lecteurs possible...
    salut Mac LAK,

    pas tout à fait d'accord avec toi, les raisons :

    - le temps de chargement de cette utilitaire est parfois ENORME "en tout cas dans mes tests"
    - il faut avoir des privilèges pour utiliser cet utilitaire
    - DISKPART va retourner "TOUS" les lecteurs amovibles donc le problème de l'automatisation ne sera pas résolu.


    Non, cette boucle ne va pas essayer toute les lettres, mais elle va faire un break si le fichier est trouvé

    mais l'autre idée, que tu as cité, est bien aussi (de définir un nom de volume)

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    Bonjour à tous

    je me permets juste t'intervenir sur diskpart et je rejoins I'm_HERE, le temps est long et sur mon pc cette boucle ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /F "tokens=3" %%I in ('echo list volume ^| diskpart ^| find /i "amovible"') do (
      echo %%I => Disque amovible
    )
    Je t'ai testé sur amovible et DVD-ROM : aucun résultat.
    Car je cherche un moyen efficace de trouver n'importe quel lecteur.
    (fsutil fsinfo me renvoie une erreur si je ne met pas un CD dans le lecteur )

    Personnellement j'ai donnée un nom à ma clé usb que je traite ainsi pour la trouver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR %%A IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST %%A: (
    FOR /F "TOKENS=*" %%B IN ('VOL %%A:^|FIND /I "ACRIS_USB"') DO ECHO %%A)
    Voila si ça peut aider.

    Acris

  11. #11
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Merci Acris de ta contribution

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    en faite je vois pas trop comment exploiter le for de Mac LAK, j'ai essayé ça (un peu un mixte des deux...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cls
    @echo off
    
    for /F "tokens=3" %%I in ('echo list volume ^| diskpart ^| find /i "amovible"')
     do ( echo %%I > DisqueAmovible.txt )
    
    for /F %%I in (DisqueAmovible.txt) 
    do ( if exist %%I:\Copie des images ( xcopy /q /y /s /c "c:\*.jpg" "%%I:\Copies des images\") )
    
    del DisqueAmovible.txt
    Mais j'ai peur de ne faire que compliquer le code. En plus il ne marche pas , le programme s'arrête avant que DisqueAmovible.txt soit supprimé.

  13. #13
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par monsieurY Voir le message
    en faite je vois pas trop comment exploiter le for de Mac LAK, j'ai essayé ça (un peu un mixte des deux...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cls
    @echo off
    
    for /F "tokens=3" %%I in ('echo list volume ^| diskpart ^| find /i "amovible"')
     do ( echo %%I > DisqueAmovible.txt )
    
    for /F %%I in (DisqueAmovible.txt) 
    do ( if exist %%I:\Copie des images ( xcopy /q /y /s /c "c:\*.jpg" "%%I:\Copies des images\") )
    
    del DisqueAmovible.txt
    Mais j'ai peur de ne faire que compliquer le code. En plus il ne marche pas , le programme s'arrête avant que DisqueAmovible.txt soit supprimé.
    pourquoi faire simple quand on peux faire plus compliqué

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    oui je me complique un peu la vie , mais je tente on sais jamais...

    sinon je comprend pas la fin du code à Acris :

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    I'm_HERE > de rien
    Une erreur de ma part j'avais attribué une variable pour la suite de mon code

    corrige en retirant le set :






    Pour ton code, DisqueAmovible.txt ne serait pas vide ?? si non qu'as tu comme résultat dedans ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    
    for /F "tokens=3" %%I in ('echo list volume ^| diskpart ^| find /i "amovible"')
     do ( echo %%I > DisqueAmovible.txt )
    
    for /F %%I in (DisqueAmovible.txt) 
    do ( if exist %%I:\  ( xcopy /q /y /s /c "c:\*.jpg" "%%I:\Copies des images\") )
    
    del DisqueAmovible.txt

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Il y a la lettre "G" qui correspond bien au lecteur de ma clé.

  17. #17
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Acris j'ai essayé avec ton code mais j'arrive pas à le faire marcher, malgrés la "pause" il se termine automatiquement et aucune images n'est copiées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cls
    @echo off
    
    for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) 
    do ( if exist %%a: ( for /f %%b in ( 'vol %%a:^ | find /i "KINGSTONB"' ) 
                               do ( xcopy /q /y /s /c "c:\*.jpg" "%%a:\Copies des images\" ) ) )
    
    pause>nul
    Je crois que mon erreur vient du deuxième "for", d'ailleurs je comprend pas à quoi il sert. On peut pas mettre juste le "do"?

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je viens de comprendre : il sert à trouver parmi tous les lecteurs celui qui s'appelle "Nom_de_la_clé".

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    Oui c'est ça

  20. #20
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    - le temps de chargement de cette utilitaire est parfois ENORME "en tout cas dans mes tests"
    En appel direct en ligne de commande, en effet, ça arrive qu'il soit long... Notamment lorsque l'on est en train d'utiliser le système disque, d'ailleurs. Par contre, via le echo, et va savoir pourquoi, chez moi c'est toujours instantané.

    Citation Envoyé par I'm_HERE Voir le message
    - il faut avoir des privilèges pour utiliser cet utilitaire
    Je t'avoue que, justement, c'est un point qui me fait le préférer à une solution bovine, car cela permet d'éviter de faire un batch analysant les différentes partitions du système SANS avoir les droits d'admin...

    Citation Envoyé par I'm_HERE Voir le message
    - DISKPART va retourner "TOUS" les lecteurs amovibles donc le problème de l'automatisation ne sera pas résolu.
    Tu résous le problème en partie en te limitant aux disques amovibles, et en excluant les unités non-montées (comme les CD) et, surtout, les drives réseau... Une déconnexion et/ou une charge réseau, et c'est 30 secondes dans les dents pour scanner une des unités.
    Si tu es, comme moi, tenu pour raisons professionnelles d'avoir une douzaine d'unités réseau montées avec 1/4 d'entre elles qui sont coupées de façon plus ou moins aléatoire, je te garantis que ça commence à devenir un point important...

    Citation Envoyé par I'm_HERE Voir le message
    Non, cette boucle ne va pas essayer toute les lettres, mais elle va faire un break si le fichier est trouvé
    Tu vas tenter de toutes les essayer, et c'est là le souci si tu n'as pas de clé montée et que tu commences à partir dans les dernières lettres : chez moi, ce sont justement les lecteurs réseau.

    Citation Envoyé par I'm_HERE Voir le message
    mais l'autre idée, que tu as cité, est bien aussi (de définir un nom de volume)
    Personnellement, j'utilise plusieurs techniques simultanées pour ce genre de problème :
    • Je scanne uniquement les unités amovibles.
    • Ma clé "à moi" possède un nom bien précis, nom que je donne à TOUTES mes clés USB personnelles (LAK_USB_STICK, pour tout te dire).
    • Mes clés USB sont montées sur une lettre fixe (ex : ma clé 16 Go est toujours montée en G:, ma clé 2 Go en H.
    En groupant les trois critères, je suis à peu près certain que c'est bien MA clé qui est connectée et non pas autre chose.

    Pour info, ma problématique est que je me sers de mes clés pour déplacer de machine en machine des répertoires de développement complets pouvant être compilés, qui peuvent dépasser allègrement 4 Go de fichiers... Inutile de te dire que je prends toutes les précautions possibles pour ne pas les copier n'importe où, car cela pourrait avoir des conséquences catastrophiques.


    @monsieurY : pour utiliser ma boucle for, il te suffisait d'utiliser directement la variable %%I, exactement comme tu le fais plus loin...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for /F "tokens=3" %%I in ('echo list volume ^| diskpart ^| find /i "amovible"')
     do (
      xcopy /q /y /s /c "c:\*.jpg" "%%I:\Copies des images\"
    )
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/12/2012, 16h50
  2. Synchroniser des dossiers et fichiers sur une clé USB
    Par kilian67 dans le forum Windows XP
    Réponses: 5
    Dernier message: 01/12/2008, 17h24
  3. Réponses: 2
    Dernier message: 29/03/2007, 15h45
  4. Copier des fichiers d'une machine à une autre
    Par Empty_body dans le forum Réseau
    Réponses: 3
    Dernier message: 29/10/2006, 12h44
  5. récupérer des données sur une clef USB
    Par mullger dans le forum Périphériques
    Réponses: 6
    Dernier message: 25/09/2006, 18h38

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