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 :

Synchronisation via Robocopy à partir d'une liste de dossiers stockés dans un fichier texte


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 77
    Points
    77
    Par défaut Synchronisation via Robocopy à partir d'une liste de dossiers stockés dans un fichier texte
    Bonjour à tous,

    Je voudrais créer un script utilisant la fonction ROBOCOPY avec l'option /MIR avec 2 paramètres en entrée:
    $FichierListeDosser
    $DossierDestination

    Le fichier TEST_FIC.TXT contient une liste de répertoire comme ci-dessous :
    S:\SOURCE
    S:\PROG\BIN
    S:\PROG\DATA
    S:\SIMULATION
    etc...

    L'idée est de pouvoir lancer le script SYNC.PS1 "c:\temp\POWERSHELL\TEST_FIC.TXT" "E:\SYNCH" afin de synchroniser tous les fichiers/répertoires/sous-répertoires des dossier stockés dans le fichier source dans le répertoire destination.


    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 77
    Points
    77
    Par défaut
    Bonjour à tout le monde,

    J'ai avancé sur mon problème(voir code plus bas) mais je suis confronté au problème que je ne synchronise que le dernier répertoire source du fichier.
    Normal car la fonction synchronisation efface le répertoire destination.

    Il faudrait que je puisse créer la même arborescence des répertoires du fichier txt dans le dossier destination.

    Exemple de déroulé de la synchronisation
    #1ere ligne du fichier texte #
    Répertorie Source : S:\SOURCE
    Répertoire Destination : E:\SYNCH\SOURCE
    Synchronisation 1ere ligne du fichier texte
    # 2eme ligne du fichier texte #
    Répertorie Source : S:\PROG\BIN
    Répertoire Destination : E:\SYNCH\PROG\BIN
    Synchronisation 1ere ligne du fichier texte
    ...

    Comment faire pour , avant lancer la synchronisation , créer la même arborescence que le répertoire source mais dans le répertoire de destination ?


    Merci d'avance


    P.S : Code source :

    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
    param (
        [string]$CheminFichier,
        [string]$Destination
    )
    
    # Vérifier si la source et la destination sont spéifiées
    if (-not  $CheminFichier -or -not $Destination) {
        Write-Host "Veuillez spécifier la source et la destination."
        exit
    }
    
    # Parcourir le fichier texte et exécuter Robocopy pour chaque répertoire
    Get-Content $CheminFichier | ForEach-Object {
        # Supprimer les espaces blancs autour du chemin du répertoire
        $Repertoire = $_.Trim()
    
        robocopy $Repertoire $Destination /MIR
        
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je pense que robocopy se chargera de sa création

    Code powershell : 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
    param (
        [string]$CheminFichier,
        [string]$Destination
    )
     
    # Vérifier si la source et la destination sont spéifiées
    if (-not  $CheminFichier -or -not $Destination) {
        Write-Host "Veuillez spécifier la source et la destination."
        exit
    }
     
    # Parcourir le fichier texte et exécuter Robocopy pour chaque répertoire
    Get-Content $CheminFichier | ForEach-Object {
        # Supprimer les espaces blancs autour du chemin du répertoire
        $Repertoire = $_.Trim()
     
        # Ajoute le nom du dossier à la destination
        $Desti = "$Destination\$([System.IO.Path]::GetFileName($Repertoire))"
     
        robocopy $Repertoire $Desti /MIR
     
    }

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 77
    Points
    77
    Par défaut
    Merci ça fonctionne.

    Par contre il ne créé que le dernier sous répertoire , par exemple :
    Répertorie Source : S:\PROG\BIN
    Répertoire Destination : E:\SYNCH\BIN

    Alors que j'aimerai qu'il créé toute l'arborescence E:\SYNCH\PROG\BIN car je risque d'avoir des doublons ...
    C'est pour ça que j'aimerai conserver toute l'arborescence dans mon répertoire destination.

    Merci encore pour ton aide.

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 109
    Points : 77
    Points
    77
    Par défaut
    Bonjour à tout le monde,

    J'ai réussi à faire ce que je voulais , voici le code :

    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
    param (
        [string]$CheminFichier,
        [string]$Destination
    )
     
    # Vérifier si la source et la destination sont spéifiées
    if (-not  $CheminFichier -or -not $Destination) {
        Write-Host "Veuillez spécifier la source et la destination."
        exit
    }
     
    # Parcourir le fichier texte et exécuter Robocopy pour chaque répertoire
    Get-Content $CheminFichier | ForEach-Object {
        # Supprimer les espaces blancs autour du chemin du répertoire
        $Repertoire = $_.Trim()
     
    
        $Desti = "$Destination\$([System.IO.Path]::GetFullPath($Repertoire))"
        # Création de l'arborescence  du répertoire de destination
        $Desti= $Desti.Replace([System.IO.Path]::GetPathRoot($Repertoire),"")
    
        #Write-Host $Desti
        robocopy $Repertoire $Desti /MIR | Out-Null
    
        if ($lastexitcode -eq 0)
         {
              write-host $Repertoire " - Robocopy succeeded"
         }
        else
        {
              write-host $Repertoire " - Robocopy failed with exit code:" $lastexitcode
        }
     
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2014, 12h38
  2. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  3. [MySQL] ENvoyer un émail a une liste des emailes stocké dans une base de données My SQL
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 19/07/2012, 12h11
  4. Réponses: 2
    Dernier message: 21/03/2012, 10h21

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