PowerShell Dosya Sayısı Davranışı


5

PowerShell'de yeniyim ve aşağıdaki davranışla ilgili bir sorum var. Belli bir dizindeki dosya sayısını saymaya çalışıyorum. Bazı varsa, onları başka bir yere kopyalayacağım. İşte test klasörümün çıktısı; kod, bulduğum MSDN örneklerinden değiştirildi:

[PS]> Get-ChildItem c:\pstdump

Directory: C:\pstdump

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2/12/2011   9:48 AM          0 blah.pst
-a---         2/12/2011   9:36 AM          0 New Text Document.txt
-a---         2/12/2011   9:36 AM         20 New WinRAR archive.rar

[PS]> (Get-ChildItem c:\pstdump).Count
3
[PS]>

Her şey iyi ve iyi; PowerShell ve ben, klasörde 3 dosya bulunduğunu kabul ediyoruz. Şimdi belirli dosya türlerini seçmek istediğimde (örneğin .PST dosyaları):

[PS]> Get-ChildItem c:\pstdump -filter "*.pst"

Directory: C:\pstdump

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2/12/2011   9:48 AM          0 blah.pst

[PS]> (Get-ChildItem c:\pstdump -filter "*.pst").Count
[PS]>

Filtre 1 dosya döndürüyor olsa bile '.Count' hiçbir şey döndürmüyor. Bunun yanlış bir sayı olduğunu düşünüyorum.

Birisi lütfen neden bu 'yanlış' ifadesini açıklayabilir.

Alternatif olarak, yapmam gereken bariz n00b hatası için bana kızmaktan çekinmeyin.

Teşekkürler!

Yanıtlar:


6

Bir tuhaflık veya özellik olarak adlandırın, ancak bunun PowerShell'in yalnızca 1 uzunluğundaki listelerle nasıl başa çıktığı ile ilgisi var. Onları "düzleştirir", böylece artık bir liste değil, tek bir FileInfo nesnesi olur. FileInfo nesnesinin Count özelliği olmadığından sonuç alamazsınız. Bu konuyu çözmenin birkaç yolu var:

  1. Dizi operatöründe sararak döndürülen değeri bir dizi olarak kalmaya zorlayın @():

    @(Get-ChildItem c:\pstdump -filter "*.pst").Count
    
  2. Measure-Object cmdlet'ini kullanın:

    (Get-ChildItem c:\pstdump -filter "*.pst" | measure).Count
    

Parlak! Sadece '@' önünde tokatladı ve dizi sayısı beklendiği gibi çalışıyor. Cevap için teşekkürler!
Beeblebrox

0

Klasörün işlenip işlenmeyeceğine karar vermek için bir dizindeki dosya türlerinin sayısını almaya çalışıyordum.

Yukarıdakiler işe yararken, belirli dosyaların veya dosya türlerinin varlığını kontrol etmek için Test-Path kullanmak daha iyi bir çözüm olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.