0
votes

Script PowerShell pour supprimer des fichiers basés sur le nom du début du fichier

J'ai donc des fichiers dans un dossier qui commencent par xxx

et xxx

exemple de fichiers xxx

J'essaie d'obtenir mon script PowerShell pour supprimer uniquement des fichiers de 1 __ ancien que 60 minutes tandis que 0 __ Peut être supprimé tous les 360 minutes .

voici mon code actuel xxx

mon script traite actuellement les deux fichiers et les supprits tous les deux sur 360 minute intivals.


1 commentaires

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


3 Réponses :


-1
votes

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


0 commentaires

0
votes

Vous pouvez rationaliser Votre propre solution comme suit:

  • Utilisez -File et -Directory pour limiter Get-Childitem Pour produire uniquement des éléments de ce type.

  • Utilisez -include avec un PowerShell Expression générique pour limiter la correspondance à des fichiers dont les noms commencent par 0 __ ou 1 __ . xxx

    Remarque: le -Quant paramètre commun dans la commande ci-dessus les aperçus l'opération. Supprimer -Quform une fois que vous êtes sûr que l'opération fera ce que vous voulez.

    Remarque:

    • ($ limit_guest, $ limit_logged_in) [$ _. Nom -l simple '1 __ *'] émule un conditionnel ternaire en sélectionnant l'un des $ 6 * Valeurs basées sur le conditionnel $ _. Nom --ike '1 __ *' : si le conditionnel évalue à $ vrai , il est interprété comme indice de tableau 1 , sinon comme 0 .

    • L'opérateur -itant prend en charge les mêmes motifs génériques que get-chillitem 'S -include paramètre, mais notez que le PARAMETER PLUS SUR FASTER - SEULE SEULEMENT SEULEMENT DES PATTRES DIFFÉRENTS, moins puissants - voir Cette réponse .


0 commentaires

0
votes

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"
    }
}


1 commentaires

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