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).