Écrire un script qui trie les fichiers par mois à partir de la propriété LastModificationDate :

  • Le script crée un répertoire « Mois » pour chaque fichier et l'y déplace
  • L'argument d'entrée est le chemin d'accès à l'ensemble de fichiers (obligatoire, accepter le pipeline)
  • Le script ne renvoie rien

Cette fonction ne fonctionne que sur le répertoire courant. Besoin de prendre un paramètre de dossier. Comment puis-je modifier le script ?

function Get-FileMonth {

    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$true)]
        [string]$Folder
    )
        $Files = Get-ChildItem -Path $Folder -File
        Get-ChildItem -Path $Folder -File | Where-Object {$_.LastWriteTime.Month}`
        | New-Item -Name {$_.LastWriteTime.Month} -ItemType Directory
        ForEach ($File in $Files)
            {
            Copy-Item $File -Destination "$($File.LastWriteTime.Month)"
            }
    }
2
юра 3 févr. 2020 à 18:25

1 réponse

Meilleure réponse

Voici comment j'effectuerais les tâches que vous demandez :

function Format-Files ($folder) {

    #Get all files in the folder
    $files = Get-ChildItem -Path $folder -File

    foreach($file in $files){
        #Create a new path using the LastWriteTime.Month property
        $fullPath = (Join-Path -Path $folder -ChildPath $file.LastWriteTime.Month)

        if (!(Test-Path $fullPath)){
            #The directory needs to be created
            New-Item -Name $file.LastWriteTime.Month -Path $folder -ItemType Directory
        }

        #Copy the item to the new directory
        Copy-Item -Path $file.FullName -Destination $fullPath
    }    
}

Faites-moi savoir si vous avez des questions ou des problèmes. Vous devriez utiliser ceci comme :

Format-Files("C:\Path\To\Directory")
1
I.T Delinquent 3 févr. 2020 à 16:01