Długość programu PowerShell nie pojawi się w danych wyjściowych Get-ChildItem
Próbuję tego polecenia w Windows 10 PowerShell:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime
Wynik zawiera tylko FullName
, while LastAccessTime
i Length
brakuje w danych wyjściowych.
PowerShell ScreenShot
Co ja robię źle?
Odpowiedzi
To zadziała:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv
Problem jest tylko problemem z wyświetlaniem :
Ponieważ ścieżki między obiektami wyjściowymi są długie i
FullName
jest to pierwsza wybrana właściwość, pozostałe właściwości (kolumny) nie są drukowane , ponieważ nie mieszczą się na ekranie. Jednak właściwości są obecne i mogą być używane programowo.Uwaga: Jeśli zamierzasz zapisać do pliku w celu późniejszego przetwarzania programowego , nie powinieneś używać
>
/Out-File
, co skutkuje tym samym formatowaniem wyświetlania , jakie widzisz w konsoli (terminalu), ponieważ to formatowanie jest przeznaczone tylko dla obserwator ludzki .- Dla programowego przetwarzania , użyć strukturalnego formatu danych , takich jak CSV , jak pokazano w odpowiedzi Ashok Prasath za
Obejścia :
Szybkim i trudnym obejściem jest umieszczenie
FullName
właściwości na końcu , jak radzi Doug Maurer , co spowoduje wyświetlenie wszystkich właściwości (kolumn), chociażFullName
wartości właściwości zostaną obcięte (oznaczone symbolem…
), a zwłaszcza od początku ścieżek:# FullName is placed *last* # Caveat: Paths will be truncated at the *end*. Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
Jeśli nie masz nic przeciwko przełączeniu się na format oparty na liście , w którym każda wartość właściwości jest reprezentowana we własnym wierszu poprzedzonym nazwą właściwości, potokuj do Format-List; zwróć uwagę, że zbyt długie wartości będą zawijane w wierszach :
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
Jeśli chcesz tabelaryczne dane wyjściowe i nie masz nic przeciwko zawijaniu wierszy w swoim wyniku , możesz przesłać do Out-Stringniego
-Width
wartość wystarczająco dużą, aby zmieściła się we wszystkich kolumnach (pamiętaj, że Out-Filerównież obsługuje-Width
):Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300
Jeśli wolisz przewijanie w poziomie od zawijania wierszy, możesz zapisać powyższe do pliku i otworzyć w nim edytor tekstu lub za pomocą edytora tekstu, takiego jak Visual Studio Code , możesz bezpośrednio przesłać do niego dane wyjściowe:
# Opens the output directly in a new Visual Studio Code editor tab. Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300 | code -
W przeciwnym razie - jeśli chcesz zobaczyć tabelarycznej wyświetlacz w konsoli , w takiej kolejności podanej kolumnie i bez linii owijania - jedynym rozwiązaniem jest obciąć te
FullName
wartości tak, że wszystkie kolumny zmieści; zwróć uwagę, że ze względu na zwięzłość pomijam wywołanieselect
( Select-Object) na rzecz bezpośredniego użycia Format-Table:Get-ChildItem -Recurse | Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'}, Length, LastAccessTime
Zwróć uwagę, jak szerokość kolumny (
w
pozycja, skrót odwidth
) jest oparta na oknie konsoli ze znakami[Console]::WindowWidth
minus ( )45
, aby pokazać jak najwięcejFullName
wartości, jednocześnie pozostawiając miejsce na pozostałe dwie kolumny; również, aby upewnić się, że obcięcie (symbolizowane symbolem…
jest stosowane na początku ścieżki - aby nazwa pliku / katalogu była zawsze wyświetlana - kolumna jest wyrównana do prawej strony (poprzeza
wpis, skrótalignment
); jeśli wolisz obcinanie końca toru, pominąć tena
wpis (który następnie domyślnieleft
).Aby uzyskać więcej informacji na temat
@{ ... }
sposobu określania tak zwanych obliczonych właściwości dlaFormat-Table
, opartego na tablicy haszy ( ) , w tym sposobu obcinania od początku, przy jednoczesnym zachowaniu wyrównania do lewej , zobacz tę odpowiedź .