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 :

Incrémenter nom de dossier [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Septembre 2018
    Messages : 6
    Par défaut Incrémenter nom de dossier
    Bonjour,

    Je réalise à l'aide d'un script la copie des fichiers d'un répertoire vers un autre, cependant dans le répertoire vers lequel je copie mes fichiers j aimerai qu'à l’exécution du script ce dernier crée avant un répertoire appelé "sauvegarde1" dans lequels ilt y copie mes fichier qu'a chaque exécution du script il en crée un nouveau jusqu'à "sauvegarde4" maximum même si cela peut être adapté. Et qu'ensuite la variable qui incrémente le nombre du nom des dossiers revienne à 1 et donc qu'a la 5ème copie cela écrase le répertoire 1 puis 2 3 et 4 pour faire un cycle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $inc = 1
    #Verification de l'existence du repertoire
    $Path = Test-Path \\192.168.150.18\TestBackup\Sauvegarde$inc 
    If (($Path) -eq $True) {
        $inc++
        Write-Host "----> Fichier existant" -ForegroundColor red
        }else{
        Write-Host "----> Fichier inexistant" -ForegroundColor Green
        }

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Un truc comme cela

    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
    $incmin = 1
    $incmax = 4
    $chemin = "\\192.168.150.18\TestBackup\Sauvegarde"
     
     
    if (Test-Path -LiteralPath "$chemin$incmax" -PathType Container)
    {
        Remove-Item -LiteralPath "$chemin$incmin" -Force -Recurse
    }
     
    for ($i = $incmin; $i -le $incmax; $i++)
    { 
        if (!(Test-Path -LiteralPath "$chemin$incmax" -PathType Container))
        {
            # Je fait ma copie
     
            break
        }
    }

    Après réflexion, il va y avoir un problème car après la 4eme sauvegarde il va toujours la faire en 1.
    Soit on laisse un flag soit un autre mécanisme, la sauvegarde sera effectué une fois pas jour ? ou a quel cadence ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Sinon je te propose ceci si tu effectue une sauvegarde par jour

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $incmin = 1
    $incmax = 4
    $chemin = "\\192.168.150.18\TestBackup\Sauvegarde"
     
    $idx = ([Math]::Floor(((Get-Date) - ([datetime]"01/05/1900")).TotalDays) % ($incmax - $incmin + 1)) + $incmin
     
     
    if (Test-Path -LiteralPath "$chemin$idx" -PathType Container)
    {
        Remove-Item -LiteralPath "$chemin$idx" -Force -Recurse
    }
     
    # Je fait ma copie dans "$chemin$idx"

    Si cela ne convient pas non nous nous baserons sur la date de création du dossier pour le supprimer

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Septembre 2018
    Messages : 6
    Par défaut
    Merci pour ta réponse,

    Mon but est d'effectuer une sauvegarde par semaine et donc de garder au total 4 sauvegarde :
    (Je fais 4 sauvegarde maximum car il y a beaucoup de chose à copié et c'est pour conserver de l'espace)
    semaine 1 : sauvegarde 1
    ...
    ...
    semaine 4 sauvegarde 4
    semaine 5 : copie des informations supplémentaire qui ont eu lieu dans ce laps de temps dans le répertoire sauvegarde1
    semaine 6 : copie des informations supplémentaire qui ont eu lieu dans ce laps de temps dans le répertoire sauvegarde2
    etc..

    J'avais réussi à créer ces 4 répertoires de sauvegardes mais une fois tout terminé je revenais bien en sauvegarde 1 mais par la suite dès que je copié les informations cela ce faisait uniquement dans le répertoire sauvegarde1

    Pour moi la meilleur solution est de faire par rapport à la date de création des répertoires et sélectionner le plus ancien pour réaliser la copie dedans je vais regardé par rapport a ce que tu ma donné pour essayer de l'adapter mais il n'y a pas besoin de supprimer les répertoires car lors de ma copie cela copie uniquement les nouveaux éléments merci encore^^

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Septembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Septembre 2018
    Messages : 6
    Par défaut
    Voila mon code qui est pour le coup très moche xD
    Ducoup la il me faudrait juste savoir la date de la plus ancienne modification pour effectué une copie dessus et ça serait bon puis je me débrouillerai plus tard pour le rendre plus simple^^



    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    $id = 1
    $Source = "$env:UserPROFILE\Documents"
    
    
    #Verification création des repertoires et copie
    $Path = Test-Path "\\192.168.150.18\TestBackup\Sauvegarde$id"
    If (($Path) -eq $False) {
       
          $path = "\\192.168.150.18\TestBackup\Sauvegarde$id"
    
          #Copie des fichiers dans le repertoire 1
           robocopy $Source $path /E /R:1 /W:1
       
           Write-Host "----> Sauvegarde 1 cree" -ForegroundColor Green   
        
    
            }else{
                
                Write-Host "----> Sauvegarde 1 existante" -ForegroundColor red
                
                $id++
                $Path = Test-Path "\\192.168.150.18\TestBackup\Sauvegarde$id"
                If (($Path) -eq $False) {
        
                     Write-Host "----> Sauvegarde 2 cree" -ForegroundColor Green 
                     $path = "\\192.168.150.18\TestBackup\Sauvegarde$id"
                     #Copie des fichiers
                     robocopy $Source $path /E /R:1 /W:1
                     
                     
                     }else{
                        Write-Host "----> Sauvegarde 2 existante" -ForegroundColor red
                         $id++
                         $Path = Test-Path "\\192.168.150.18\TestBackup\Sauvegarde$id"
                         If (($Path) -eq $False) {
        
                             Write-Host "----> Sauvegarde 3 cree" -ForegroundColor Green 
                             $path = "\\192.168.150.18\TestBackup\Sauvegarde$id"
                             #Copie des fichiers
                             robocopy $Source $path /E /R:1 /W:1
                             }else{ 
                                Write-Host "----> Sauvegarde 3 existante" -ForegroundColor red
                                $id++
                                $Path = Test-Path "\\192.168.150.18\TestBackup\Sauvegarde$id"
                                If (($Path) -eq $False) {
        
                                     Write-Host "----> Sauvegarde 4 cree" -ForegroundColor Green 
                                    $path = "\\192.168.150.18\TestBackup\Sauvegarde$id"
                                    #Copie des fichiers
                                    robocopy $Source $path /E /R:1 /W:1
                                    }else{
    
                                    #Copie dans le répertoire le plus ancien
                                    Write-Host "----> Sauvegarde 4 existante" -ForegroundColor red
                                  
    
                                    }
                                 }
    
    
                     }
    
                 }

  6. #6
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    salut Maxime96

    j'ai revue un peu ton dernier script pour le rendre plus leger
    de plus je pense que ton script qu'il ne fonctionne pas comme tu veux

    alors pour suivre le repertoire de la dernière sauvegarde, j'ai choisi de rajouter un souligner en debut du nom
    ça permet au script de fonctionner et ça aide a repérer le repertoire lors d'une restauration
    et par experience ces plus fiable que la date de modification du dossier

    pour l'utilisation robocopy, perso, je mettrais l'option /MIR à la place /E pour qu'il efface de la sauvegarde les fichiers qui existe plus dans "mes documents"

    si tu veux tu peux changer le nombre de jours de sauvegarde jusqu'à neuf

    si tu des questions n'hexite pas

    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
    $idmax = 4 # nombre maximun de sauvegarde (de 2 à 9)
    $Source = "$env:UserPROFILE\Documents"
    $destination = "\\192.168.150.18\TestBackup\$env:UserName"
    $destination = "\\acceslan\serveurs\Sauvegardes\$env:UserName"
    
    # a la premiere execution du script création des repertoires sauvegardes
    1..$idmax | ForEach-Object {
        If (-not (Test-Path "$destination\Sauvegarde$_") -and -not (Test-Path "$destination\_Sauvegarde$_")) {
            new-Item -ItemType directory -Path "$destination\Sauvegarde$_" | Out-Null
            Write-Host "----> Sauvegarde $_ cree" -ForegroundColor Green   
            }
        }
    
    # recuperation du repertoire sauvegarde le plus ancien
    $rep = Get-ChildItem $destination | Sort-Object name  # liste des nom de tous les repertoires sauvegarde
    
    if ($rep[0].name.Substring(0,1) -eq "_") {  # verification si il y a deja eu une sauvegarde (la derniere sauvegarde contient un souligner au debut du nom)
        $id = [convert]::ToInt32($rep[0].name[-1], 10)  # recup du numero du repertoire
        Rename-Item $rep[0].FullName "Sauvegarde$id" # enleve le soulignier au repertoire de la derniere sauvegarde
        $id = $id + 1
        if ($id -gt $idmax) {
            $id = 1
            }
        Rename-Item "$destination\Sauvegarde$id" "_Sauvegarde$id" # rajoute le soulignier au repertoire la prochaine sauvegarde
        }
    else {  # si il n'y a jamais eu de sauvegarde, la sauvegarde ce fais dans le premier repertoire 
        $id = 1
        Rename-Item "$destination\Sauvegarde$id" "_Sauvegarde$id"
        }
    
    $Path = "$destination\_Sauvegarde$id\Sauvegarde"
    #Copie des fichiers
    robocopy $Source $path /E /R:1 /W:1

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

Discussions similaires

  1. Extraction du nom du dossier de la web-app dans un CustomTag
    Par santana2006 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 13/08/2006, 12h35
  2. lister les noms de dossier dans un menu déroulant
    Par WeDgEMasTeR dans le forum Langage
    Réponses: 9
    Dernier message: 01/04/2006, 01h53
  3. [nom de dossier dans liens HTML] renseignements
    Par guy2004 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 30/03/2006, 09h26
  4. comment changer nom du dossier apres documents and settings
    Par orientalys dans le forum Windows XP
    Réponses: 1
    Dernier message: 09/12/2005, 01h00
  5. [JTree] Affichage des Noms de dossiers
    Par Dextro dans le forum Composants
    Réponses: 3
    Dernier message: 04/05/2005, 12h54

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