Unable to exclude directory using Get-ChildItem -Exclude parameter in Powershell ve How can I exclude multiple folders using Get-ChildItem -exclude? numaralı telefonlara baktığımı söyleyerek başlayayım. Bunların hiçbiri benim problemimi çözen bir cevaba sahip değil.Get-ChildItem'in belirli bir dizini geçmesini nasıl önleyebilirim?
Belirli bir uzantıya sahip dosyalar için bir dizini yinelemeli olarak aramalıyım. Basitlik için, sadece *.txt
'u bulmam gerektiğini söyleyelim. Normal olarak, bu komut yeterli olacaktır: Büyük bir sorunum var. C:\mysearchdir\
içinde bir yere gömülmüş node_modules
dizini ve NPM son derece derin iç içe dizinler oluşturur. (Bu derinlik benim kontrolü dışında olduğu anlamına gelir çünkü bir NPM yönetilen dizin olma detay sadece önemlidir.) Bu aşağıdaki hatası:
Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
Bu hata sınırlamalar kadar baloncuk inanıyoruz. NET IO kütüphaneleri.
Çevrede bulunan diğer dizinlerde çok fazla arama yapamıyorum. Bu dizinin en üstünde değil; C:\mysearchdir\dir1\dir2\dir3\node_modules
numaralı telefondan daha derinde ve bu seviyelerde arama yapmam gereken dizinler var. Bu yüzden, etrafındaki diğer dizinleri aramak, daha fazla dosya ve dizin eklendiğinden hantal ve çok bakımlı olmayacaktır.
-Exclude
parametresini herhangi bir işlem yapmadan denedim. just read'dan beri -Exclude
'un yalnızca sonuçların getirilmesinden sonra uygulanmasından bu şaşırtıcı değil. -Filter
'u kullanarak gerçek bir bilgi bulamıyorum (this answer numaralı belgede belirtildiği gibi).
Çalışmak için Get-ChildItem
alabileceğim herhangi bir yol var mı, yoksa kendi yinelemeli geçişimi mi yazdım?
$Source = 'S:\Prod'
$Exclude = @('S:\Prod\Dir 1', 'S:\Prod\Dir 2')
Get-ChildItem -LiteralPath $Source -Directory -Recurse -PipelineVariable Dir -EV e -EA SilentlyContinue |
Where {($Exclude | Where {($Dir.FullName -eq "$_") -or ($Dir.FullName -like "$_\*")}).count -eq 0}
Bu yardımcı olacaktır, [powershell-dosya-yolu-çok uzun] (http://quickbytesstuff.blogspot.de/2014/05/powershell-file-path-too-long.html), bir System.IO –
yerine üçüncü taraf kitaplığı PowerShell'de [bu özyinelemeli model] (http://stackoverflow.com/a/929277/712649) uygulayabilir ve ad "node_modules" ise dizini yok saymak için bir koşul ekleyebilirsiniz. –
Downvoter, iyileştirme önerileri sunabilir mi? – jpmc26