0
votes

Comment puis-je déplacer plusieurs fois des fichiers de manière récursive avec Powershell?

J'essaye d'exécuter 2 commandes différentes dans 1 script.

Je veux essentiellement déplacer les fichiers de plus de 10 minutes vers un dossier de sauvegarde, puis dans le dossier de sauvegarde, si le fichier dure plus de 14 jours, je veux qu'il soit automatiquement supprimé.

Je veux que cela s'exécute immédiatement au démarrage de l'ordinateur, donc j'utilise le planificateur de tâches pour l'exécuter.

Actuellement, j'ai essayé d'écrire les codes ensemble, mais il ne semble pas exécuter tout le code.

Le code pour déplacer les fichiers:

while ($true) {
  Get-ChildItem 'C:\Users\Computer\Desktop\Remove' -Recurse | Where-Object {($_.LastWriteTime.Date -le (Get-Date).Date.AddDays(-14))} |  Remove-Item
}

Le code pour supprimer les fichiers: p>

while ($true) {
  get-childitem -Path "C:\Users\Computer\Desktop\Powershell-test" -recurse | where-object {$_.LastWriteTime -le (get-date).AddMinutes(-1)}|  move-item -destination "C:\Users\Computer\Desktop\Powershell--transfer" -force; 
  Start-Sleep -Seconds 1
}

Je voudrais que tout cela s'exécute à partir d'un script en un seul code.


2 commentaires

Pourquoi ne pas simplement utiliser robocopy ?


Si "n'exécute pas tout le code" , nous avons probablement besoin de voir ce qui définit votre boucle while. Je ne crois même pas que vous ayez besoin d'une boucle d'un while par rapport à une valeur booléenne .


3 Réponses :


0
votes

Cet extrait provient d'un script PowerShell:

.SYNOPSIS Script pour supprimer ou lister les anciens fichiers dans un dossier

.DESCRIPTION Script pour supprimer les fichiers datant de plus de x jours . Le script est construit pour être utilisé comme tâche planifiée , il est automatiquement génère un nom de fichier journal basé sur l'emplacement de la copie et le date / heure. Il existe différents niveaux de journalisation disponibles et le Le script peut également s'exécuter en mode -listonly dans lequel il ne répertorie que les fichiers autrement, il supprimerait. Il existe deux routines principales, une à supprimer les fichiers et une deuxième routine qui vérifie s'il y en a des vides dossiers restants qui pourraient être supprimés.

... peut être trouvé ICI


0 commentaires

0
votes

Combinez les commandes dans while body.

while ($true) {
    Get-ChildItem -Path "C:\Users\Computer\Desktop\Powershell-test" -recurse | where-object {$_.LastWriteTime -le (get-date).AddMinutes(-1)}| move-item -destination "C:\Users\Computer\Desktop\Powershell--transfer" -force; 
    Get-ChildItem 'C:\Users\Computer\Desktop\Powershell--transfer' -Recurse | Where-Object {($_.LastWriteTime.Date -le (Get-Date).Date.AddDays(-14))} |  Remove-Item;
    Start-Sleep -Seconds 1;
}

PS pourquoi ne pas régler la période de sommeil sur 1 minute au lieu de 1 seconde?


0 commentaires

0
votes

Voici ce que fait votre code:

  1. Déplacer tous les fichiers datant de plus d'une minute, pas dix, vers le dossier spécifié
  2. Dormez pendant une seconde
  3. Répétez.

Il n'exécute jamais la deuxième section car vous les enfermez dans des boucles while séparées. Vous devrez les mettre dans le même bloc while .


0 commentaires