Commande Powershell pour supprimer les sous-dossiers sans supprimer la racine
Je vais avoir des problèmes pour créer une commande PS, qui me permet de supprimer plusieurs sous-dossiers sans supprimer le toit dossier.
I. E:
C:\Test a de nombreux sous-dossiers:
- C:\Test\Item1
- C:\Test\Item2
- C:\Test\Item3
Et les dossiers Élément1, Élément2 et Item3 ont beaucoup de sous-dossiers et fichiers.
Je voudrais créer un PS qui me permettrait de supprimer tous les vides, les sous-dossiers à l'intérieur de Élément1, Élément2 et Item3 sans supprimer Élément1, Élément2 et Item3 dossiers. Il est possible que les dossiers des éléments est vide, mais je ne veux pas les supprimer, juste le vide le contenu de chaque dossier.
C'est juste un exemple, j'ai un avoir autour de 300 dossiers des éléments à l'intérieur de Test.
J'ai l'habitude d'utiliser ce:
$path="C:\TEST"
do {
$dir = gci $path -directory -recurse | Where { (gci $_.fullName).count -eq 0 } | select -expandproperty FullName
$dir | Foreach-Object { Remove-Item $_ }
} while ($dir.count -gt 0)
Mais cela supprime le dossier racine dossier (Item1, Item2 ou Item3) s'ils sont vides.
Merci d'avance.
OriginalL'auteur CrazyCow89 | 2017-02-08
Vous devez vous connecter pour publier un commentaire.
De sorte que vous cherchez à supprimer Tous les Éléments à l'intérieur de Vide de sous-dossiers ou de tous les éléments en Général?
Cela va supprimer tous les Dossiers ou les Objets en Général à l'intérieur du Répertoire "C:\abc\"
Cela va supprimer tous les Dossiers qui n'ont pas tous les éléments en eux.
Cela permettra de regarder à l'intérieur "C:\abc\" Obtenir tous les enfants et de supprimer tous les Répertoires vides à l'intérieur de la Enfants dans votre exemple, ce serait Élément1,Élément2,...
Juste un moyen rapide et sale morceau de Code que je n'ai pas beaucoup de temps, j'espère que je pourrais aider.
EDIT: Voici ce que j'ai trouvé, ce n'est pas aussi performant que je le souhaiterais, mais il fait le travail et est assez rapide, de l'essayer pour vous-même il a travaillé pour moi - même jeté dans un couple de commentaires et de sortie afin de clarifier ce qui se passe.
Une autre chose que j'ai pu utiliser, il suffit de supprimer tous les fichiers et dossiers à l'intérieur de la Item 1.. ItemZ dossiers s'ils sont âgés de plus de X temps. Pourrait que rendre les choses plus faciles? Ce que je ne veux pas, c'est de supprimer le ItemX dossiers.
Fule Petite mise à jour ici: j'ai réussi à supprimer TOUS les fichiers, mais lorsque j'essaie de supprimer uniquement ceux âgés de plus de X nombre de jours, il ne fonctionne pas:
$Path = "C:\Test\"
$itemFolders= Get-ChildItem -Path $Path
$limit = (Get-Date).AddDays(-30)
$itemFolders| Foreach-Object {
Get-ChildItem -Path $_.FullName |
Where-Object {((Get-ChildItem $_.FullName).Count -ge 0) -or ($_.CreationTime -lt $limit)} |
Foreach-object {Remove-item -Recurse -Force -path $_.FullName} }
juste édité ma réponse espère que ça aide
Il fonctionne parfaitement bien! Merci beaucoup!
OriginalL'auteur Fabian Fulde