J'ai besoin d'obtenir tous les fichiers, y compris les fichiers présents dans les sous-dossiers qui appartiennent à 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 complet.
*.txt*
(-Filter
utilise des jokers CMD). Si ce n'est pas ce que vous voulez, utilisez-Include *.txt
.Vous pouvez également utiliser Select-Object comme ceci:
la source
Select-Object
renvoiePSCustomObject
, pas une chaîne. Cela pourrait ne pas fonctionner si vous utilisez le résultat comme paramètre pour un autre programmePSCustomObject
, utilisez-ExpandProperty FullName
au lieu de simplementFullName
. Pour autant que je sache, le-ExpandProperty
paramètre oblige l'applet de commande à renvoyer les résultats en tant que type (natif?) De la propriété spécifiée plutôt qu'en tant qu'objet personnalisé.Get-ChildItem -Path 'C:\Program Files\TheProgram' -Recurse | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-03-01')} | Select-Object FullName
En voici une plus courte:
la source
(gci -r c:\).fullname
(ls -r c:\).fullname
(ls -r c:).fullname
Si vous voulez des chemins relatifs, vous pouvez simplement utiliser l'
-Name
indicateur.Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name
la source
C'est ce que j'ai utilisé. Je pense que c'est plus compréhensible car il ne contient aucune syntaxe de boucle.
la source
Chose vraiment ennuyeuse dans PS 5, où $ _ ne sera pas le chemin complet à l'intérieur de foreach. Ce sont les versions chaîne des objets FileInfo et DirectoryInfo. Pour une raison quelconque, un caractère générique dans le chemin le corrige, ou utilisez Powershell 6 ou 7. Vous pouvez également diriger vers get-item au milieu.
Cela semble avoir été un problème avec .Net qui a été résolu dans .Net Core (Powershell 7): le comportement de stringification des instances FileInfo / Directory a changé depuis la v6.0.2 # 7132
la source
Cela a fonctionné pour moi et produit une liste de noms:
Je l'ai trouvé en utilisant
get-member -membertype properties
, une commande incroyablement utile. la plupart des options qu'il vous propose sont accompagnées d'un.<thing>
, commefullname
ici. Vous pouvez coller la même commande;à la fin de toute commande pour obtenir plus d'informations sur ce que vous pouvez faire avec eux et comment y accéder:
la source
Essaye ça:
la source
Pourquoi personne n'a encore utilisé la boucle foreach? Un avantage ici est que vous pouvez facilement nommer votre variable:
la source
$
devanttextfile
:$textfile = $fileList[$i].FullName
. En supposant qu'il$i
a une valeur numérique, c'est-à-dire.la source
[syntaxe alternative]
Pour certaines personnes, les opérateurs de tuyauterie directionnelle ne sont pas à leur goût, mais préfèrent plutôt le chaînage. Voir quelques opinions intéressantes sur ce sujet partagées dans le suivi des problèmes 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, l'utilisation de pipe contre enumerable nécessite un jeton spécial
$_
(akaPowerShell's "THIS" token
) peut sembler désagréable à certains.Pour ces types, voici une façon plus concise et directe de le faire avec le chaînage de points :
(<diatribe> Notez que l'analyseur d'arguments de commande PowerShell accepte les noms de paramètres partiels Ainsi , en plus.
-recursive
;-recursiv
,-recursi
,-recurs
,-recur
,-recu
,-rec
et-re
sont acceptés, mais malheureusement pas-r
.. qui est le seul choix correct qui fait sens avec un seul-
caractère (si nous suivez les conventions POSIXy UNIXy)! </rant>)la source
-r
forme courte de-Recurse
fonctionne bien pour moi.-File
commutateur-fi
de l'exemple:-fil
et-file
fonctionne, mais pas-f
. Selon le style POSIX, cela devrait être--file
(multi-lettres) et-f
(une seule lettre, à moins que -f ne soit réservé à autre chose, disonsforce
switch, alors cela peut être autre chose comme-l
ou aucune option à une seule lettre).J'utilise le script ci-dessous pour extraire tout le chemin du dossier:
Le chemin d'accès complet au dossier ne vient pas. Après 113 caractères, arrive:
la source
J'ai utilisé cette commande de ligne pour rechercher les fichiers ".xlm" dans "C: \ Temp" et le chemin du nom complet de l'impression dans le fichier "result.txt":
Dans mes tests, cette syntaxe fonctionne très bien pour moi.
la source