web-dev-qa-db-fra.com

Obtenir le chemin complet des fichiers dans PowerShell

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.

107
Gagan

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
}
166
Chris N

Cela devrait être beaucoup plus rapide qu'avec un filtrage tardif:

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
78
Shay Levy

Vous pouvez également utiliser Select-Object like ainsi:

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
18
imlokesh

En voici un plus court:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
11
JustAGuy

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

8
Polymorphix
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.

3
Mandrake

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

1
vulcan raven
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
1
Vuong Doan

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
1
L1ttl3J1m

Essaye ça:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
1
Mykhailo Basiuk

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 { "$_" }
1
js2010

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...
0
Ankit Gupta