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

VBScript Discussion :

Script synchro sur le nom de lecteur


Sujet :

VBScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut Script synchro sur le nom de lecteur
    Bonjour,

    J'ai réalisé plusieurs scripts en batch ou en bash mais je ne connais pas le vbscript. Or, je pense que pour le script que je souhaite réaliser, je dois passer par ce langage.
    Je souhaite donc réaliser un script de synchro entre le répertoire "Mes documents" d'un XP et une clé USB et ce, afin de réaliser une sauvegarde en miroir sur la clé.
    Jusque là pas de soucis, un petit batch robocopy /MIR et ça roule. Mais le problème c'est que je veux que la destination ne soit pas un chemin ou une lettre de lecteur car si je plug un jour ma clé elle portera la lettre F: mais peut-être que le lendemain elle portera la lettre G: car j'aurai connecter avant mon mp3 sur le F:
    Je souhaite donc que ce robocopy prenne comme destination, non pas la lettre de lecteur, mais le nom de la clé, par exemple : "usb_michel".

    J'espère avoir été clair. SI vous avez des idées ? Peut-être faut-il utiliser un autre langage, une autre commande que robocopy ou peut-être est-ce possible en batch ?

    Merci

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut Script à Tester
    Citation Envoyé par zenred Voir le message
    Bonjour,
    J'ai réalisé plusieurs scripts en batch ou en bash mais je ne connais pas le vbscript. Or, je pense que pour le script que je souhaite réaliser, je dois passer par ce langage.
    Je souhaite donc réaliser un script de synchro entre le répertoire "Mes documents" d'un XP et une clé USB et ce, afin de réaliser une sauvegarde en miroir sur la clé.
    Jusque là pas de soucis, un petit batch robocopy /MIR et ça roule. Mais le problème c'est que je veux que la destination ne soit pas un chemin ou une lettre de lecteur car si je plug un jour ma clé elle portera la lettre F: mais peut-être que le lendemain elle portera la lettre G: car j'aurai connecter avant mon mp3 sur le F:
    Je souhaite donc que ce robocopy prenne comme destination, non pas la lettre de lecteur, mais le nom de la clé, par exemple : "usb_michel".
    J'espère avoir été clair. SI vous avez des idées ? Peut-être faut-il utiliser un autre langage, une autre commande que robocopy ou peut-être est-ce possible en batch ?
    Merci
    Salut Bon J'ai fait rapidement ce petit brouillon et sans test qu'on peut l'améliorer bien sûr ! peut-être il y a quelques fautes syntaxiques ou bien des guillemets oubliés Donc ceci à tester par vous-même
    NB : Dans ce Script j'ai utiliser la commande MS-Dos xcopy
    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
    36
    37
    38
    39
    40
    strComputer = "."
    Dim NumSerie,chemin
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ws = WScript.CreateObject("WScript.Shell")
     
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive WHERE InterfaceType='USB'",,48)
    intCount = 0
    For Each drive In colItems
        If drive.mediaType <> "" Then
            intCount = intCount + 1
        End If
    Next
    If intCount > 0 Then
        MsgBox "Votre Clé USB Personnelle est bien Connectée !",64,"Flash Drive Check © Hackoo!"
     
      For Each Drive In fso.Drives
      If Drive.IsReady Then
      If Drive.DriveType=1 Then
      NumSerie=fso.Drives(Drive + "\").SerialNumber
      Amovible=fso.Drives(Drive + "\")
      Numserie=ABS(INT(Numserie))
      volume=fso.Drives(Drive + "\").VolumeName
      chemin=Ws.SpecialFolders("MyDocuments")
      'msgbox Amovible
     MsgBox Ws.SpecialFolders("MyDocuments"),64,"Mes Documents" 
    'Com = "cmd /c xcopy.exe " & chemin&" "&Amovible &" /D /s /e /H /R"
    Com = "cmd /c xcopy.exe " & Ws.SpecialFolders("MyDocuments")&" "&Amovible &" /D /s /e /H /R"
    Result = Ws.Run(Com,0,True)
     end if
      End If
     Next
      'MsgBox "La Clé Usb inséré a comme Num° de Série "&NumSerie,64,"Vérification Clé Usb © Hackoo"
      else
     
       MsgBox Ws.SpecialFolders("MyDocuments"),64,"Mes Documents"
    	Ws.Run "cmd /c @echo " & beep, 0
    	wscript.sleep 1000
    	MsgBox "Votre Clé USB Personnelle n'est pas Connectée ",48,"Flash Drive Check © Hackoo !"
    End If

  3. #3
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Bizarre comme ça me rappelle qque chose dont on vient de parler

    Très facilement adaptable en vbScript, puisque utilisant le FSO

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut
    Citation Envoyé par zenred Voir le message
    Bonjour,
    .....
    Je souhaite donc que ce robocopy prenne comme destination, non pas la lettre de lecteur, mais le nom de la clé, par exemple : "usb_michel".
    ......
    Merci
    Moi avec le code de hackoofr je ne parviens pas à détecter le nom de la clef mais son N°.
    Si il y a plusieurs ports USB avec chacun une clef branchée, elles sont toutes détectées.
    Code modifié de hackoofr pour ces essais
    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
    strComputer = "."
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive WHERE InterfaceType='USB'",,48)
    intCount = 0
    For Each drive In colItems
        If drive.mediaType <> "" Then
            intCount = intCount + 1
        End If
    Next
    If intCount > 0 Then
            'au moins 1 clef usb est branché, pas forcement la bonne!
            MsgBox "Votre Clé USB Personnelle est bien Connectée !",64
     
            For Each Drive In fso.Drives
                    If Drive.IsReady Then
                            If Drive.DriveType=1 Then
                                    NumSerie=fso.Drives(Drive + "\").SerialNumber
                                    Amovible=fso.Drives(Drive + "\")
                                    'affichage de chaque clef USB branchée, quelque soit le son nom
                                    msgbox Amovible & NumSerie
                            end if
                    End If
            Next
            else
    	'Aucune clef USB n'est branchée
            MsgBox "Votre Clé USB Personnelle n'est pas Connectée ",48,"Flash Drive Check © Hackoo !"
    End If
    Je propose donc cette façon de faire
    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
    36
    dim U, Trouver
    Dim fso, Unite, MaClef
     
    Function TypeUnite(LettreUnite)
    'Pour gérer les lettres d'unitée non utilisées
    On Error Resume Next
    Set Unite = fso.GetDrive(LettreUnite) '1 = "Amovible"
    'si pas dispo err=68
    if err = 0 then TypeUnite = Unite.DriveType
    End Function
     
    Function NameClef()
       NameClef = Unite.VolumeName
    End Function
     
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    MaClef = "USB PERSO" 'chez moi obligatoirement en majuscule
    'MaClef = "NOLIMIT"
    'MaClef = "NON BRANCHER"
    '******** pour toi:  MaClef = "USB_MICHEL"
    Trouver = false
    For U = 65 to 90
            if TypeUnite(chr(U)) = 1 then '1 = "Amovible"
                    if NameClef = MaClef then
                            msgbox "Clef(" & chr(u) & "):" & MaClef & " trouvée"
                            Trouver = true
                            exit for
                    end if
            end if
    next
    If trouver = true then
            msgbox "copie des fichiers"
            else
            msgbox "Impossible de copier les fichiers," & vbcrlf & "la clef " & MaClef & " non trouvée"
    end if
    La chose qui ne me satisfait pas et l'utilisation de On Error Resume Next.
    Je suis plus sur la détection du nom de la clefs que sur son N° de série, cela donne la possibilité d'avoir plusieurs clef portant le même nom, par contre elles ne devront pas être branchées en même temps.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    Je suis sur le script de ProgElecT car d'après ProgElecT, le premier script ne correspond pas à ma demande.
    J'arrive à décrypter le gros du script mais je ne vois pas où rentrer le chemin du répertoire source.

    Autre question : Est-ce que ce script gère l'incrémental ?

  6. #6
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Citation Envoyé par zenred
    ....
    Je souhaite donc réaliser un script de synchro entre le répertoire "Mes documents" d'un XP et une clé USB et ce, afin de réaliser une sauvegarde en miroir sur la clé.
    Jusque là pas de soucis, un petit batch robocopy /MIR et ça roule.
    ....

    Je pensais que tu savais faire
    Sachant que
    Citation Envoyé par Fenêtre Dos: XCOPY /?
    ....
    XCOPY source destination
    Xcopy: Copie des fichiers et des arborescences de répertoires.
    ....
    En mixant avec la proposition de hackoofr cela peut donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If trouver = true then
            dim ChemSrc, ChemDest, Com, Result, Ws
            Set Ws = WScript.CreateObject("WScript.Shell")
            ChemSrc = Ws.SpecialFolders("MyDocuments")
            ChemDest = chr(u) & ":\"
            msgbox "Copie des fichiers depuis le dossier " & ChemSrc & vbcrlf &  "vers la clef USB de destination " & chr(u)
            'Com = "cmd /c xcopy.exe " & ChemSrc & " " & ChemDest & " /D /s /e /H /R"
            'Result = Ws.Run(Com,0,True)
            else
            msgbox "Impossible de copier les fichiers," & vbcrlf & "la clef " & MaClef & " n'a pas été trouvée"
    end if
    J'ai remer les 2 lignes, ne voulant pas les déclencher, donc cette partie n'est pas vérifiée, à toi de faire les essais, cela doit fonctionner.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    Désolé mais je ne connais rien au vbscript. Je n'avais pas compris qu'il fallait que je mixe ton script avec celui de hackoofr.

    Je teste ta dernière solution et je vous fais un retour

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    J'ai modifié le script mais il doit manquer quelque chose car ça ne fonctionne pas. Le transfert de fichiers ne se fait pas. J'ai tenté de faire une pause après le Ws.Run(objCommand) mais la fenêtre disparait quand même sans faire de pause. Voyez-vous ce qui accroche.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    'Déclaration des variables
    dim U, Trouver
    Dim fso, Unite, MaClef
     
    'Gestion des lettres d'unité non utilisées
    Function TypeUnite(LettreUnite)
    'Si la clé n'est pas pluggée, retourner err=68
    On Error Resume Next
    Set Unite = fso.GetDrive(LettreUnite) '1 = "Amovible"
    'Si la clé est bien pluggée, retourner la lettre de lecteur
    if err = 0 then TypeUnite = Unite.DriveType
    End Function
     
    'Renvoi du nom de la clé
    Function NameClef()
    	NameClef = Unite.VolumeName
    End Function
     
    '
    Set fso = CreateObject("Scripting.FileSystemObject")
    'Déclaration du nom  de la clé
    MaClef = "USB DAVID" '
     
    Trouver = false
    For U = 65 to 90
            if TypeUnite(chr(U)) = 1 then '1 = "Amovible"
                    if NameClef = MaClef then
                            msgbox "Clef(" & chr(u) & "):" & MaClef & " trouvée"
                            Trouver = true
                            exit for
                    end if
            end if
    next
    If trouver = true then
            dim ChemSrc, ChemDest, Com, Result, Ws
            Set Ws = WScript.CreateObject("WScript.Shell")
            ChemSrc = Ws.SpecialFolders("MyDocuments")
            ChemDest = ":\"
            msgbox "Copie des fichiers depuis le dossier " & ChemSrc & vbcrlf &  "vers la clef USB de destination " & chr(u)
    		objCommand = "RoboCopy.Exe " & ChemSrc & " " & ChemDest & " /MIR /r:1 /w:2"
    		Ws.Run(objCommand)
                    'WScript.Sleep 20000
            else
            msgbox "Impossible de copier les fichiers," & vbcrlf & "la clef " & MaClef & " n'a pas été trouvée"
    end if

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Vérifie ta chaine de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objCommand = "RoboCopy.Exe " & ChemSrc & " " & ChemDest & " /MIR /r:1 /w:2"
    msgbox objCommand

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    C'est OK, merci à tous

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

Discussions similaires

  1. [XL-2010] Récupérer les noms des lecteurs sur le PC
    Par SeB18 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/04/2013, 11h09
  2. Cherche programme ou script qui met un lien sur un nom donné
    Par Mawashigeri dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/06/2006, 05h41
  3. Réponses: 2
    Dernier message: 04/10/2005, 15h13
  4. Réponses: 3
    Dernier message: 02/09/2005, 14h57
  5. problème avec un script de generation de nom de login
    Par black_code dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2005, 13h51

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