none
Archiver plusieurs fichiers en fonction de la date de modification RRS feed

  • Question

  • Bonjour,

    Je suis débutant  sur powershell, j'ai commencé à m y ’intéresser il y a environ 10 mois

    je souhaite avoir de l'aide sur mon script d'archivage.

    Mon but c'est de créer des dossiers en fonction de la date de modification des fichiers.

    Puis de copier les fichiers sur le bon dossiers.

    Le script exécuter correctement mes instructions, cependant il ne prends pas en compte mes conditions

    C'est-à-dire que si le type de période est "A" l'archive doit être annuel, Exemple : archive_2016 ou archive_2017

    Si le type de période est "M" l'archive doit être mensuel, Exemple : archive_01 ou archive_02 etc

     

    Quand j’exécute le script avec comme paramètre (PERIODE "M") il me génère les dossiers "années et mois", Alors que je souhaite obtenir les dossiers d'archive Mensuel

    Param (
    [parameter(Mandatory=$true)][String]$type_de_periode,
    [parameter(Mandatory=$true)][String]$dossier_a_scanner,
    [parameter(Mandatory=$true)][String]$dossier_darchive,
    [parameter(Mandatory=$true)][String]$nom_de_larchive
    )
    function arc (){

    Get-ChildItem $dossier_a_scanner -Recurse -Include *.txt | 
    foreach { 
    $date_modif = $_.LastWriteTime.ToShortDateString()
    #$new_folder_name = Get-Date $x -Format yyyy.MM.dd
    $annee = Get-Date $date_modif -Format yyyy
    $mois = Get-Date $date_modif -Format MM
    $jour = Get-Date $date_modif -Format dd
    $Repertoire_annee = "$dossier_darchive\$nom_de_larchive _$annee"
    $Repertoire_mois = "$dossier_darchive\$nom_de_larchive _$mois"
    $Repertoire_jours = "$dossier_darchive\$nom_de_larchive _$jours"

    if (($type_de_periode -eq "a") -and (test-path $Repertoire_annee)){ 
        copy-item $_.fullname $Repertoire_annee 
        } else {
        new-item -ItemType directory -Path $Repertoire_annee
        Copy-item $_.fullname $Repertoire_annee 
        }
    if (($type_de_periode -eq "m") -and (test-path $Repertoire_mois)) {
        copy-item $_.fullname $Repertoire_mois
        } else {
        new-item -ItemType directory -Path $Repertoire_mois
        Copy-item $_.fullname $Repertoire_mois
        }
    if (($type_de_periode -eq "s") -and (test-path $Repertoire_jours)) {
        copy-item $_.fullname $Repertoire_jours 
        } else {
        new-item -ItemType directory -Path $Repertoire_jours
        Copy-item $_.fullname $Repertoire_jours      }
        }
    }
    $arc1 = arc $type_de_periode $dossier_a_scanner $dossier_darchive $nom_de_larchive

    Pouvez m'aider s'il vous plaît???


    • Modifié delancome dimanche 15 octobre 2017 09:41
    dimanche 15 octobre 2017 09:29

Toutes les réponses

  • Vous doublez les conditions sur les IF : vous devriez plutôt faire un switch :

    Switch ($type_de_periode) 
    {
     "M" { ...code...}
     "S" { ...code...}
     "A" { ...code...}
    }
    Le switch vous assure que le code n'est exécuté que dans un cas, alors que le IF n'implique pas la limitation.


    lundi 16 octobre 2017 10:34
  • Merci beaucoup Loïc pour ta réponse.

    J'ai jamais utilisé le "switch"

    Merci encore pour ta réponse


    mardi 17 octobre 2017 22:17