Wiele liczników z Powershell Get-ChildItem? [Zamknięte]

-1

Jak miałbym użyć programu PowerShell do zliczania liczby plików i folderów w folderze, emulując „właściwości” tego folderu w systemie Windows?

(get-childitem -recurse).count

zwraca całkowitą liczbę obiektów (suma liczby folderów i plików), oraz

(gci -rec | where { $_.PSIsContainer }).count

zwraca liczbę folderów. Ale czy istnieje sposób na policzenie folderów i plików w jednym poleceniu bez dwukrotnego przejścia przez system plików? Zakładam, że możliwe jest pisanie proceduralnego kodu PowerShell z nazwanymi zmiennymi i pętlami, ale nie wydaje się to normalnym sposobem korzystania z niego.


W pokrewnym temacie http://technet.microsoft.com/en-us/library/ee692796.aspx opisuje dwa sposoby uzyskania listy nazw plików:

Get-ChildItem C:\Scripts | Select-Object Name

i

Get-ChildItem C:\Scripts -name

Autor twierdzi, że są one równoważne, ale z -recurse pierwsze zwraca tylko nazwy plików, podczas gdy drugie zwraca pełną ścieżkę. Czy istnieje sposób na to, aby Select-Object zwrócił pełną ścieżkę, aby te dwa polecenia generowały ten sam wynik? (Losowe dźgnięcie w Select-Object Pathwytworzone puste linie, a nie ścieżki).

gci -rec -name
gci -rec | Select-Object xxx?
Dave
źródło
Odpowiedź udzielona przez Shay Levy na stackoverflow.com/questions/17032252/… .
Dave
2
Rozumiem, skąd bierze się twoje nieporozumienie, ale nie jest to właściwe zastosowanie przesyłania postów. Meta pytanie, do którego się odwołujesz, jest stare i nie jest oficjalnym oświadczeniem. Oficjalne FAQ na cross-posting wyraźnie stwierdza, że cross-wpis nie jest dozwolone. Jeśli uznasz, że twoje pytanie lepiej pasuje gdzie indziej, poproś o migrację lub usuń je i zadaj ponownie. W meta postie, o której wspomniałeś, nie jest z natury złe, że mają podobne (ale osobne) pytania na różnych stronach, pod warunkiem, że każde z nich jest dostosowane do odbiorców tej witryny.
nhinkle

Odpowiedzi:

1

Możesz pobrać typ każdego elementu podczas iteracji po plikach, a następnie użyć group-objectkomendy, aby uzyskać liczbę każdego typu:

dir -rec | %{$_.GetType()} | group-object name | select name,count

Name          Count
----          -----
DirectoryInfo    15
FileInfo         26

Aby odpowiedzieć na drugie pytanie, wystarczy wybrać FullNamewłaściwość:

Get-ChildItem C:\Scripts | Select-Object FullName
zdan
źródło