J'ai donc des fichiers dans un dossier qui commencent par et p> exemple de fichiers p> J'essaie d'obtenir mon script PowerShell pour supprimer uniquement des fichiers de voici mon code actuel p> mon script traite actuellement les deux fichiers et les supprits tous les deux sur 1 __ code> ancien que
60 minutes code> tandis que
0 __ code> Peut être supprimé tous les
360 minutes code>. p>
360 minute code> intivals. p> p>
3 Réponses :
a trouvé une solution à l'aide de si et d'autre avec une correspondance de modèle de regex.
$limit_guest = (Get-Date).AddMinutes(-360) #6 hours $limit_logged_in = (Get-Date).AddMinutes(-60) #1 hours $path = "C:\cache" # Delete files older than the $limit. Get-ChildItem -Path $path -Recurse -Force | Where-Object { if ( $_ -match "^0__.*" ) { !$_.PSIsContainer -and $_.CreationTime -lt $limit_guest } else { !$_.PSIsContainer -and $_.CreationTime -lt $limit_logged_in } } | Remove-Item -Force # Delete any empty directories left behind after deleting the old files. Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
Vous pouvez rationaliser Votre propre solution comme suit:
Utilisez Utilisez Remarque: le Remarque: p> L'opérateur code> -itant code> prend en charge les mêmes motifs génériques que -File code> et
-Directory code> pour limiter
Get-Childitem code>
Pour produire uniquement des éléments de ce type. P> li>
-include code> avec un PowerShell Expression générique pour limiter la correspondance à des fichiers dont les noms commencent par
0 __ code> ou
1 __ p> p> li>.
ul>
-Quant code> paramètre commun
dans la commande ci-dessus les aperçus em> l'opération. Supprimer -Quform code> une fois que vous êtes sûr que l'opération fera ce que vous voulez. Sup> p>
($ limit_guest, $ limit_logged_in) [$ _. Nom -l simple '1 __ *'] code> émule un conditionnel ternaire en sélectionnant l'un des
$ 6 * code > Valeurs basées sur le conditionnel
$ _. Nom --ike '1 __ *' Code>: si le conditionnel évalue à
$ vrai code>, il est interprété comme indice de tableau
1 code>, sinon comme
0 code>. p> li>
get-chillitem code> 'S
-include code> paramètre, mais notez que le
PARAMETER CODE> PLUS SUR FASTER - SEULE SEULEMENT SEULEMENT DES PATTRES DIFFÉRENTS, moins puissants - voir Cette réponse . P> li>
ul> p>
Veuillez trouver le script pour une sortie exacte attendue.
Remplacez le chemin avec votre chemin d'origine P>
$folder = Get-ChildItem -Path "C:\Users\***\Desktop\New folder\*.php" -Recurse -Force foreach($file in $folder) { if($file.Name -match "^0_.*" -and $file.CreationTime -lt (Get-Date).AddMinutes(-360) ) { Remove-item $file -Force -Recurse -ErrorAction SilentlyContinue Write-Host "Deleted"$file.Name } elseif($file.Name -match "^1_.*" -and $file.CreationTime -lt (Get-Date).AddMinutes(-60)) { Remove-item $file -Force -Recurse -ErrorAction SilentlyContinue Write-Host "Deleted"$file.Name } else { Write-Host "No files found" } }
Le script fonctionne bien dans mon système. Pourriez-vous s'il vous plaît expliquer où vous faites face à la question. Donc, que je peux corriger pour vous
Il ressemble à un seul utilisateur de toutes les réponses sans explication (bien qu'il n'y aient aucun moyen de savoir à coup sûr).