Auteur de questions
Archiver plusieurs fichiers en fonction de la date de modification

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
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.
- Modifié Loïc Veirman lundi 16 octobre 2017 10:36
- Proposé comme réponse Loïc Veirman mercredi 18 octobre 2017 06:06
-