2013-10-06 8 views
7

Ich mag Liste von Dateien erhalten (eigentlich Anzahl von Dateien) in einem Pfad, bestimmte Typen rekursiv, mit Ausnahme vonAusschließen Liste der Elemente von Get-ChildItem Ergebnis in Powershell?

Get-ChildItem -Path $path -Recurse | ? { $_.Name -notlike "*.cs" -and $_.Name -notlike "*.tt" } 

aber ich habe eine lange Liste von Ausnahmen (um nur einige zu nennen):

@("*.cs", "*.tt", "*.xaml", "*.csproj", "*.sln", "*.xml", "*.cmd", "*.txt") 

Wie die Liste mit diesem Formular erhalten:

Get-ChildItem -Path $path -Recurse | ? { <# what to put here ?#> } 

?

Antwort

9

Dies funktioniert auch:

get-childitem $path -recurse -exclude *.cs,*.tt,*.xaml,*.csproj,*.sln,*.xml,*.cmd,*.txt 
+2

Wie unterscheidet es sich von der angenommenen Antwort? – pinepain

+1

@pinepain, ich denke, es ist einfacher, einlinig, weniger wortreich, also differenziert von (vorher) akzeptierter Antwort. – Tar

14

Sie Ausschlüsse Get-ChildItem mit dem -exclude Parameter liefern:

$excluded = @("*.cs", "*.tt", "*.xaml", "*.csproj", "*.sln", "*.xml", "*.cmd", "*.txt") 
get-childitem -path $path -recurse -exclude $excluded 
+0

Dank. Die Einsicht ist hier in der Lage, ein Array zu übergeben -exclude – sdjuan

4

Hier ist, wie Sie es tun würde eine Where-Object-Cmdlets:

$exclude = @(".cs", ".tt", ".xaml", ".csproj", ".sln", ".xml", ".cmd", ".txt") 
Get-ChildItem -Path $path -Recurse | Where-Object { $exclude -notcontains $_.Extension } 

Wenn Sie nicht wollen, Verzeichnisse in den Ergebnissen auch zurückgegeben werden, dann verwenden Sie diese:

$exclude = @(".cs", ".tt", ".xaml", ".csproj", ".sln", ".xml", ".cmd", ".txt") 
Get-ChildItem -Path $path -Recurse | Where-Object { (-not $_.PSIsContainer) -and ($exclude -notcontains $_.Extension) } 
1
Set-Location C:\ 

$ExcludedcDirectory = "Windows|Program|Visual|Trend|NVidia|inet" 
$SearchThis = Get-ChildItem -Directory | where Name -NotMatch $ExcludedcDirectory 

$OutlookFiles = foreach ($myDir in $SearchThis) {  
    $Fn = Split-Path $myDir.fullname 
    $mypath = "Get-ChildItem -Path $Fn\*.pst, *.ost -Recurse -ErrorAction SilentlyContinue" 

    Invoke-Expression "$mypath" 
} 
$OutlookFiles.FullName 
Verwandte Themen