Je dois obtenir tous les fichiers, y compris les fichiers présents dans les sous-dossiers appartenant à un type particulier.
Je fais quelque chose comme ça en utilisant Get-ChildItem :
Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
Cependant, cela ne me renvoie que les noms de fichiers et non le chemin d'accès complet.
Ajoutez | select FullName
à la fin de votre ligne ci-dessus. Si vous avez besoin de faire quelque chose avec ça par la suite, vous devrez peut-être le diriger dans une boucle foreach, comme ceci:
get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
Write-Host $_.FullName
}
Cela devrait être beaucoup plus rapide qu'avec un filtrage tardif:
Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
Vous pouvez également utiliser Select-Object like ainsi:
Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
En voici un plus court:
(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
Si les chemins relatifs sont ce que vous voulez, vous pouvez simplement utiliser l'indicateur -Name
.
Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name
Get-ChildItem -Recurse *.txt | Format-Table FullName
C'est ce que j'ai utilisé. Je pense que c'est plus compréhensible car il ne contient pas de syntaxe de boucle.
[syntaxe alternative]
Pour certaines personnes, les opérateurs de conduites directionnelles ne sont pas leur goût, mais préfèrent plutôt l'enchaînement. Consultez des avis intéressants sur ce sujet partagés dans le compte-rendu de roslyn: dotnet/roslyn # 5445 .
En fonction du cas et du contexte, l’une de ces approches peut être considérée comme implicite (ou indirecte). Par exemple, dans ce cas, utiliser un canal contre une énumération nécessite un jeton spécial $_
(aussi appelé PowerShell's "THIS" token
) peut sembler déplaisant pour certains.
Pour ces types, voici une façon plus concise et plus simple de le faire avec dot chaining:
(gci . -re -fi *.txt).FullName
(<rant> Notez que l'analyseur d'arguments de commande de PowerShell accepte les noms de paramètres partiels. Ainsi, en plus de -recursive
; -recursiv
, -recursi
, -recurs
, -recur
, -recu
, -rec
et -re
sont acceptés, mais malheureusement pas -r
.. qui est le seul choix correct qui a du sens avec un seul caractère -
(si nous suivons les conventions POSIXy UNIXy)! </ rant>)
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
Cela a fonctionné pour moi et produit une liste de noms:
$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname
Je l'ai trouvé en utilisant get-member -membertype properties
, une commande incroyablement utile. La plupart des options qu’il vous donne sont accompagnées d’un .<thing>
, comme fullname
est ici. Vous pouvez coller la même commande;
| get-member -membertype properties
à la fin de chaque commande pour obtenir plus d'informations sur les opérations que vous pouvez effectuer avec elles et sur la façon d'y accéder:
get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties
Essaye ça:
Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
Vraiment ennuyeux dans PS 5, où $ _ ne sera pas le chemin complet dans foreach. Il s'agit des versions de chaîne des objets FileInfo et DirectoryInfo. Pour une raison quelconque, un caractère générique dans le chemin corrige le problème ou utilise PS 6. Vous pouvez également diriger vers un élément get au milieu.
Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }
Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }
J'utilise le script ci-dessous pour extraire tout le chemin du dossier:
Get-ChildItem -path "C:\" -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File "Folder_List.csv"
Le chemin complet du dossier ne vient pas. Après 113 caractères, arrive:
Example - C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-US\ec4d5fdd-aa12-400f-83e2-7b0ea6023eb7\Windows...