1
votes

Expression régulière PowerShell pour supprimer les dossiers qui ont été extraits des correctifs Windows à la racine du lecteur C

Besoin d'un modèle d'expression régulière PowerShell pour supprimer les dossiers laissés derrière qui ont été extraits par les correctifs Windows de la racine du lecteur C

gci c:\ | ? {$_.name -match '^[^a-zA-Z].*'} 

cela me permet de commencer par le nombre, mais besoin d'un modèle plus solide, ainsi que celui qui commence par la lettre pour m'assurer que je ne supprime pas accidentellement d'autres répertoires Windows sans utiliser le filtre d'exclusion

c:\0260cbbd38dbbbea2543f8
c:\096ea4b36d877b65dc6c
c:\0cf52cad06ab7b5cfe2b4042c8
c:\0d90c7a3bdd67a5212aa527bc49b
c:\0e2180b528a8c152566816291c2252
c:\1050411ef7c0228177
c:\120dc98c3c427148e0e847
c:\1266b191a6041be04da921
c:\134f4bae5dcd171cba9d795c
c:\163037d9459286ec00226ecba86c6b
c:\19c5e16d96cff11fb276
c:\1a45ab7c977d005fa74016
c:\1ce14958a6b03c4fbdd0aa7595
c:\1d4dd4b97f3bc25610224b794970
c:\1e8dca560de070e9c7ce5ea666b1a2
c:\225f0c8c83d4680dcaf7f3
c:\27d0be422124c8e6895f55a2d92e6b45
c:\27e73ccf209a2d26b918bae979003e62
c:\2cbfba046b23288dda36b27681
c:\2d19c1e6f0c6d79a27f11258ed5a
c:\3368da3dec9eaf0c1bd2aa3e
c:\3572040545b171d83e9a8edbc517
c:\3651fe9fb1a4d98c8752b834c823fb
c:\37bc2d84450d0712ba434ab58b9be3b5
c:\397ede84503ab8705c61
c:\39b805b4909ca6ab7444
c:\3c3c48d33d8849a8738b547e9a
c:\3c4b849f11f1f97e739d91f23f
c:\406699ef4baa3836e6
c:\430dca3d98c1433dbb06c41b
c:\438f43589bf4d2e91de92257
c:\442b9d9e1f12d6527a355fbb94
c:\444fc210df5624fc57ed431b41
c:\4e80466bc0bd9a225a1d0c6c49eda3
c:\513f6e8fd2ec94ee80e1
c:\527c723b1c15e5ad1777f0
c:\52c8c81ce00ef83612bea8
c:\52cf084fe6416eac75251f
c:\53bcd710184608538ed626f9
c:\5555c66e2524b093ccde17168dc2
c:\576e7da4ab59dff0a4fc453bd09ce380
c:\58af12fd0051615253
c:\595108cb19dd9e45343e
c:\5c0519db74ebb86fa611ca76a2
c:\5c18f69a206888d586d0d6bfe1
c:\5dad9ce7201f38aca9fd6fbc63f3
c:\64cf5b2b98e7bfd45bf258b06e
c:\66a725a452271ff883431f2dd7b0f1
c:\68b4cee980651b3fbc
c:\718c43ef809499044a3c
c:\734073c2f7eda3b4c38a19e0
c:\737a421b02032d614a7a1c45
c:\74edd213e1fe718df94032a51d
c:\781f57f5ac41af00be
c:\7af4485cc5429456445957
c:\7d2d566780048cba452b03c6b263
c:\7fe3e7297a62e48255533539033ee50c
c:\8228bc4c03fd5b2f1ebb24
c:\83ad2f96485c40340a2cd782
c:\88a6f42b17c78a0638
c:\88fd60c16b19a0cf73
c:\8a588e86a91e3ca897f542
c:\8acdfcd173abff9029beb5
c:\8b9e7e1b322c408d340970f0
c:\8ff8bb90108d7627eb1267d09ba0fb55
c:\90b7703a90a2c24c7b
c:\93d276f9dc924a406a6ed01b
c:\9c7ef323ec48ed5587661b4693
c:\a1eb22f89d6a07c904db
c:\a47813cc369c82be7143f47185
c:\a49ce62ce9ce98096931d23c51
c:\a61924dfd4704703d5e39c5281d29e
c:\a63849d1d3bbd85790ee4a01299bd6
c:\a753ff49744ccadded681251d331d35f
c:\ad975367f3e001f51a14c9908b23
c:\b0face991a3ad869ca
c:\b82598682fc78f9305
c:\ba8a744c5b959384186bc4
c:\babdd0ba0a07d3c9223cef
c:\bc0b82ac0babb98b8342350bc8
c:\bdc2d2f2f3bc01003a91fe0e1459
c:\c0fae0409a0b10ea75
c:\c1180e96da82fae50747
c:\c4f0fd540da02906b56741b3c9
c:\ca7f59e621d33ce834ba0d
c:\cd19f0d28269630b2a63986edd91
c:\d486081e034c03d07b7fdc7d25
c:\d4f6b9fd6bf99442f9ccf0dae3
c:\d557a9f6fa2474f0d1622c381b03
c:\d571c66922d2adca2707b43c4d91
c:\d628ab789f80774608696b5ab49702
c:\d78bc5349052849aaca6eea917eb6f97
c:\db7cbb79e4cec11e0750e59c
c:\db7d5b6b5ea0efe9b7bcf9cf
c:\de2be517ad36995b3045c5288bd68f
c:\e0a72cd7cc448809cb
c:\e196772ec200ace6dcbd
c:\ea3a0fea3bdf080ee65b60
c:\ec1b70f46f6fe0088a451a1662
c:\f04ab325c03a1380ca
c:\f3f4d3bf0fb6fdc477c13c99
c:\f43507f18e2024ffdb8ad2b189
c:\f54ce6242b345e5cf3946c98f585
c:\f65be2c2b3f903d1e8b82942fd5e8f
c:\f7f6d21a696415c6b8b2869988dee5f6
c:\fbe5089abb1a64e9b560ac32
c:\ffeb5928a51b311728428591da5683e2

p >


0 commentaires

4 Réponses :


1
votes

Cela devrait vous aider à obtenir les noms de dossier au format GUID (0..9 | a..f | A..F). Étant donné que la longueur dont vous disposez est arbitraire, cette correspondance devrait vous rapprocher de ce que vous recherchez. Je l'ai utilisé avec vos noms de dossiers et j'ai obtenu tous ceux-ci à l'exception des quelques autres que j'ai créés. Testez-le avant de le supprimer.

gci C:\ | ? { $_.Name -match '[0-9a-fA-F]{4}[0-9a-fA-F]{5}'}


0 commentaires

0
votes

Pour trouver tous les dossiers dont les noms ne contiennent que des caractères hexadécimaux (uniquement les chiffres 0..9 et les lettres a..f):

Get-ChildItem -Path 'C:\' -Force | Where-Object { $_.PSIsContainer -and $_.Name -match '^[a-f][a-f\d]+$' }

Pour ne trouver que ceux commençant par un chiffre:

Get-ChildItem -Path 'C:\' -Directory -Force | Where-Object { $_.Name -match '^[a-f][a-f\d]+$' }

Pour ne trouver que ceux commençant par une lettre a..f:

Get-ChildItem -Path 'C:\' -Directory -Force | Where-Object { $_.Name -match '^[\d][a-f\d]+$' }

J'espère que aide

L'opérateur regex -match fonctionne insensible à la casse, donc pas besoin d'utiliser [a-fA-F] sup >

PS Comme vous avez également balisé cette question avec PowerShell-2.0 , pour les versions inférieures à 3.0, il n'y a pas de commutateur -Directory et vous devez le spécifier dans le Where-Object clause comme:

Get-ChildItem -Path 'C:\' -Directory -Force | Where-Object { $_.Name -match '^[a-f\d]+$' }


1 commentaires

Merci à tout le monde. Toutes les réponses ont aidé à filtrer les correspondances. J'ai ajouté une liste d'exclusion des répertoires principaux de Windows pour m'assurer que je ne supprime pas quelque chose d'important. Je vais garder mes doigts croisés



0
votes

Il n'y a probablement pas de réponse exacte sans plus d'informations ou sans créer plus de conditions. Vous pouvez adopter l'approche consistant à faire correspondre les noms de répertoire en fonction du nombre d'alternances alphanumériques que vous voyez.

Get-ChildItem -Path 'C:\' -Force -Directory | Where Name -match '([a-f]+\d+){2}'


0 commentaires

1
votes

voici une manière légèrement différente de déterminer si le nom du répertoire est une chaîne hexadécimale. [ sourire ]

ce qu'il fait ...

  • crée une liste d'éléments dirinfo
    vous devrez l'obtenir via Get-ChildItem avec les sélecteurs appropriés pour obtenir uniquement les répertoires.
  • parcourt la liste
  • vérifie si la chaîne contient UNIQUEMENT des caractères hexadécimaux
    notez que j'ai ajouté 3 éléments avec des caractères invalides - les 2ème, 4ème et 6ème éléments.
  • rédiger un message "est / n'est pas"

le code ...

# fake reading in a list of directories
#    in real life, use Get-ChildItem -Directory
$InStuff = @(
    [System.IO.DirectoryInfo]'c:\0260cbbd38dbbbea2543f8'
    [System.IO.DirectoryInfo]'c:\zzz096ea4b36d877b65dc6c'
    [System.IO.DirectoryInfo]'c:\0cf52cad06ab7b5cfe2b4042c8'
    [System.IO.DirectoryInfo]'c:\0d90c7a3bdd67-q-w-r-t'
    [System.IO.DirectoryInfo]'c:\0e2180b528a8c152566816291c2252'
    [System.IO.DirectoryInfo]'c:\1050_411ef7c0228177'
    [System.IO.DirectoryInfo]'c:\120dc98c3c427148e0e847'
    )

foreach ($IS_Item in $InStuff)
    {
    $IsHex = $IS_Item.Name -match "[a-f0-9]{$($IS_Item.Name.Length)}"

    if ($IsHex)
        {
        Write-Host ('{0} _is_ a hexadecimal string.' -f $IS_Item)
        }
        else
        {
        Write-Warning ('    {0} is not a hexadecimal string.' -f $IS_Item)
        }
    }

je vous laisse le soin d'écrire le code de suppression. [ sourire ]


0 commentaires