J'utilise PowerShell 2.0 et je veux diriger tous les sous-répertoires d'un certain chemin. La commande suivante génère tous les fichiers et répertoires, mais je n'arrive pas à comprendre comment filtrer les fichiers.
Get-ChildItem c:\mypath -Recurse
J'ai essayé d'utiliser $_.Attributes
pour obtenir les attributs, mais je ne sais pas comment construire une instance littérale de System.IO.FileAttributes
pour la comparer. Ce cmd.exe
serait
dir /b /ad /s
powershell
powershell-2.0
Peter Hull
la source
la source
Dans PowerShell 3.0, c'est plus simple:
la source
dir
était aliaséGet-ChildItem
, et les options-Directory
et-File
fonctionnaient comme décrit. Je commandeecho $PSVersionTable
,help dir
,dir -Directory
etdir -File
de venir avec ce commentaire.ls
etdir
sont des alias deGet-ChildItem
choisir votre poisonUtilisation
Si vous préférez les alias, utilisez
ou
Pour récupérer également des sous-répertoires, ajoutez une
-r
option.Testé sur PowerShell 4.0, PowerShell 5.0 (Windows 10), PowerShell Core 6.0 (Windows 10, Mac et Linux) et PowerShell 7.0 (Windows 10, Mac et Linux).
Remarque : Sur PowerShell Core, les liens symboliques ne sont pas suivis lorsque vous spécifiez le
-r
commutateur. Pour suivre les liens symboliques, spécifiez le-FollowSymlink
commutateur avec-r
.Remarque 2 : PowerShell est désormais multiplateforme, depuis la version 6.0. La version multiplateforme s'appelait à l'origine PowerShell Core, mais le mot "Core" a été supprimé depuis PowerShell 7.0+.
Documentation Get-ChildItem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
la source
Une approche plus propre:
Je me demande si PowerShell 3.0 a un commutateur qui ne renvoie que des répertoires; cela semble être une chose logique à ajouter.
la source
-Directory
et-File
Utilisation:
la source
Depuis PowerShell v2 et plus récent (k représente le dossier dans lequel vous commencez votre recherche):
Si vous ne voulez que les noms de dossier et rien d'autre, utilisez ceci:
Si vous recherchez un dossier spécifique, vous pouvez utiliser ce qui suit. Dans ce cas, je recherche un dossier appelé
myFolder
:la source
Moins de texte est requis avec cette approche:
la source
Utilisation:
Cela vous donnera une sortie de la structure racine avec le nom du dossier pour les répertoires uniquement.
la source
Utilisation:
Qui fait ce qui suit
Get-ChildItem \\myserver\myshare\myshare\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
la source
Une approche un peu plus lisible et simple pourrait être réalisée avec le script ci-dessous:
J'espère que cela t'aides!
la source
Vous souhaiterez utiliser Get-ChildItem pour obtenir récursivement tous les dossiers et fichiers en premier. Et puis canalisez cette sortie dans une clause Where-Object qui ne prend que les fichiers.
la source
La réponse acceptée mentionne
pour obtenir une "chaîne brute". Mais en fait les objets de type
Selected.System.IO.DirectoryInfo
seront retournés. Pour les chaînes brutes, les éléments suivants peuvent être utilisés:La différence est importante si la valeur est concaténée à une chaîne:
Select-Object
étonnammentfoo\@{FullName=bar}
ForEach
opératrice:foo\bar
la source
Select-Object -ExpandProperty FullName
Ma solution est basée sur l'article TechNet Fun Things You Can Do With the Get-ChildItem Cmdlet .
Je l'ai utilisé dans mon script et ça marche bien.
la source
Utilisez celui-ci:
la source
Pour répondre spécifiquement à la question d'origine (en utilisant IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
Je préfère cependant la solution de Marek (
Where-Object { $_ -is [System.IO.DirectoryInfo] }
).la source