2017-09-29 1 views
-2

Je veux vraiment "terminer" ce script. J'ai déjà créé un petit script mais avec celui-là je suis seulement capable de supprimer les fichiers du premier dictionnaire que j'entre. Le script doit comparer deux dossiers et s'il y a des fichiers avec le même nom je veux choisir si je veux supprimer l'ancienne version ou la plus récente.Powershell Comparez le Lastwritedate et supprimez le (s) fichier (s)

// Modifier

$path1 = Read-Host "Name the 1st Path" 
$path2 = Read-Host "Name the 2nd Path" 
$Folder1 = Get-ChildItem -Path $pfad1 -Recurse 
$Folder2 = Get-ChildItem -Path $pfad2 -Recurse 
Write-Host "####################################" 
Write-Host (Get-ChildItem $pfad1,$pfad2).count 
Write-Host "Files are in the folder" 
Write-Host "####################################" 
$frage = Read-Host "Are you sure you want to delete the files YES/NO ?" 


if ($frage -eq $NO) { "Files stay " ; exit } 
else { 
     Compare-Object -ReferenceObject $Folder1 -DifferenceObject $Folder2 
-IncludeEqual | 
      Where-Object {$_.SideIndicator -eq "=="} | 
      ForEach-Object { 
      Remove-Item $_.InputObject.FullName | where { $_.lastwritetime -lt $altdate } 
      } 
       } 
+0

Veuillez ajouter ce que vous avez essayé jusqu'ici et limiter votre question à un problème spécifique. SO n'est pas une page d'écriture de code –

+0

Fait, et ty pour l'info – BGL

Répondre

0

En fonction de la taille de vos dossiers ce peut-être pas la façon la plus performante de le faire. Mais, il fonctionne.

$files = $folder1 + $folder2 
$files | 
    Group-Object name | 
    Foreach-Object { 
     $_.Group | 
     Sort-Object LastWriteTime | 
     Select-Object -Last 1 
    } | 
    Remove-Item -Force 

ok. Iv'e a retravaillé ma réponse originale pour répondre à certaines de ses lacunes. Cette réponse vous donne la possibilité de voir ce qui sera supprimé et conservé en utilisant le code de test. Je sais que j'aurais pu utiliser un switch détaillé et une fonctionnalité whatif, mais cela semblait plus facile. J'ai abordé le problème de la commande et le problème où les éléments non dupliqués seraient supprimés.

$folder1 = 'c:\temp\reports1' 
$folder2 = 'c:\temp\reports2' 


function Get-FilesForDeletion ($folder1, $folder2, [switch] $verbose){ 
    $files1 = Get-ChildItem $folder1 
    $files2 = Get-ChildItem $folder2 

    $files = $files1 + $files2 

    $i = ($files | Select-Object -ExpandProperty Directory | Measure-Object -Maximum -Property Length).Maximum 

    $files | 
     Group-Object name | 
     Where-Object Count -gt 1 | 
     Foreach-Object {  
      $process = $_ 

      $deleteMe = $process.Group | 
        Sort-Object LastWriteTime -Descending | 
        Select-Object -Last 1 

      if($verbose){ 
       Write-Host "Processing $($process.Group.Name)..." 

       $keepThese = $process.Group | 
        Sort-Object LastWriteTime | 
        Select-Object -Skip 1 

       Write-Host " - Delete $(($deleteMe.Directory.FullName).PadRight($i)) - LastWriteTime $($deleteMe.lastWriteTime) " 

       $keepThese | ForEach-Object { 
        Write-Host " - Keep $(($_.Directory.FullName).PadRight($i)) - LastWriteTime $($_.lastWriteTime) " 
       }    

       write-host " " 
       write-host " " 
      } 

      $deleteMe 
     } 
} 

# testing code 
#Get-FilesForDeletion -folder1 $folder1 -folder2 $folder2 -verbose | Out-Null 

Get-FilesForDeletion -folder1 $folder1 -folder2 $folder2 -verbose | Remove-Item 
+0

Merci beaucoup, ça marche! – BGL

+0

Pourriez-vous marquer cette réponse – Steve

+0

Première fois que j'ai essayé, cela a fonctionné. Maintenant ça ne marche plus. Il supprime uniquement le fichier le plus récent et ne compare pas les noms de fichier ... – BGL