48 votes

Comment faire pour que get-childitem filtre sur plusieurs types de fichiers ?

J'essaie d'obtenir une liste de tous les fichiers XSL et XSLT dans un répertoire.

dir -recurse -filter *.xsl,*.xslt -name

Mais l'erreur suivante :

Get-ChildItem : Impossible de convertir 'System.Object[]' en type 'System.String' requis par le paramètre 'Filter'. La méthode spécifiée n'est pas prise en charge.

dir -recurse -filter *.xsl -filter *.xslt -name

Mais j'ai eu cette erreur :

Get-ChildItem : Impossible de lier le paramètre car le paramètre 'Filter' est spécifié plus d'une fois. Pour fournir plusieurs valeurs à des paramètres qui peuvent en accepter plusieurs, utilisez la syntaxe du tableau. Par exemple, "-parameter value1,value2,value3".

Puis-je lister les deux extensions de fichier avec une seule commande ?

57voto

djeidot Points 2143
dir .\* -include ('*.xsl', '*.xslt') -recurse

34voto

crysman Points 632

Je ne sais pas pourquoi, mais celui-ci semble être beaucoup plus rapide :

dir .\ -recurse | where {$_.extension -in ".xsl",".xslt"}

13voto

Keith Miller Points 6004

Les "filtres" *.xsl y *.xslt peut également faire partie du paramètre "chemin". Chemin d'accès puede prend un tableau de chaînes de caractères :

Set-Location c:\topLevel
gci *.xsl, *.xslt -Recurse

1voto

Bart Edgerton Points 11

C'est plus ancien, mais cela m'a aidé à écrire ce script pour mettre à jour les URL dans le bureau et/ou les raccourcis favoris, alors j'ai pensé que je partagerais :

foreach ($link in GCI "$env:USERPROFILE\Desktop" | Where-Object {$_.extension -in '.lnk','.url'}) {
   $shell = New-Object -COM WScript.Shell
   $shortcut = $shell.CreateShortcut($link.FullName)
   $shortcut.TargetPath = $shortcut.TargetPath -replace "old-url.com","new-url.com"
   $shortcut.Save()
}

foreach ($link in GCI "$env:USERPROFILE\Favorites" | Where-Object {$_.extension -in '.lnk','.url'}) {
   $shell = New-Object -COM WScript.Shell
   $shortcut = $shell.CreateShortcut($link.FullName)
   $shortcut.TargetPath = $shortcut.TargetPath -replace "old-url.com","new-url.com"
   $shortcut.Save()
}

1voto

António Cruz Points 1

J'ai eu la même question et j'ai voulu éviter d'utiliser tout -Include ou -Recurse :

# Declare your base/common path:
$Path = 'C:\Xpto\123'

# Because -Filter will not accept a list, create a list
# that contains all the variations you need, and instead
# provide the list to -Path.
# Note: Requires double quotes instead of single:
$FileSpecs = ForEach-Object{$($Path + "\*.flac"), $($Path + "\*.dsf")}

Get-ChildItem -Path $FileSpecs

# In case you want to use a single line of commands:
'C:\Xpto\123' | ForEach-Object{$($_ + "\*.flac"), $($_ + "\*.dsf")} | Get-ChildItem

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X