Độ dài Powershell sẽ không hiển thị trong đầu ra của Get-ChildItem
Tôi đang thử lệnh này trong Windows 10 PowerShell:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime
Kết quả chỉ chứa FullName, while LastAccessTimevà Lengthbị thiếu từ đầu ra.
PowerShell ScreenShot
Tôi đang làm gì sai?
Trả lời
Điều này sẽ hoạt động:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv
Vấn đề chỉ là vấn đề hiển thị :
Bởi vì các đường dẫn giữa các đối tượng đầu ra dài và
FullNamelà thuộc tính đầu tiên được chọn, các thuộc tính (cột) còn lại sẽ không in , vì chúng không thể vừa trên màn hình. Tuy nhiên, các thuộc tính là hiện tại, và có thể được sử dụng lập trình.Lưu ý: Nếu mục đích là lưu vào một tệp để xử lý theo chương trình sau này , bạn không nên sử dụng
>/Out-File, điều này dẫn đến định dạng hiển thị giống như bạn thấy trong bảng điều khiển (thiết bị đầu cuối), vì định dạng này chỉ dành cho người quan sát con người .- Để xử lý theo chương trình , hãy sử dụng định dạng dữ liệu có cấu trúc như CSV , như được hiển thị trong câu trả lời của Ashok Prasath
Cách giải quyết :
Một giải pháp nhanh chóng và đơn giản là đặt thuộc
FullNametính cuối cùng , như Doug Maurer khuyên, điều này sẽ làm cho tất cả các thuộc tính (cột) hiển thị, mặc dù cácFullNamegiá trị thuộc tính sẽ bị cắt bớt (ký hiệu bằng…), và đáng chú ý là từ đầu của các đường dẫn:# FullName is placed *last* # Caveat: Paths will be truncated at the *end*. Get-ChildItem -Recurse | select Length, LastAccessTime, FullNameNếu bạn không phiền khi chuyển sang định dạng dựa trên danh sách , trong đó mỗi giá trị thuộc tính được thể hiện trên dòng riêng của nó có tiền tố là tên thuộc tính, hãy ký hiệu vào Format-List; lưu ý rằng các giá trị quá dài sẽ bao phủ dòng :
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-ListNếu bạn muốn đầu ra dạng bảng và không bận tâm đến việc bao bọc dòng trong đầu ra của mình , bạn có thể chuyển đến Out-Stringmột
-Widthgiá trị đủ lớn để vừa với tất cả các cột (lưu ý rằng Out-Filecũng hỗ trợ-Width):Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300Nếu bạn thích cuộn ngang để ngắt dòng, bạn có thể tiết kiệm trên vào một tập tin và mở nó một trình soạn thảo văn bản hay, với một trình soạn thảo văn bản như Visual Studio Mã , bạn có thể trực tiếp ống đầu ra với nó:
# Opens the output directly in a new Visual Studio Code editor tab. Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300 | code -
Mặt khác - nếu bạn muốn xem hiển thị dạng bảng trong bảng điều khiển , theo thứ tự cột chính xác được chỉ định và không có dòng bao quanh - tùy chọn duy nhất của bạn là cắt bớt các
FullNamegiá trị để tất cả các cột có thể vừa vặn; lưu ý rằng, để ngắn gọn, tôi bỏ qua lệnh gọiselect( Select-Object) để sử dụng trực tiếp Format-Table:Get-ChildItem -Recurse | Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'}, Length, LastAccessTimeLưu ý cách chiều rộng cột (
wmục nhập, viết tắt củawidth) dựa trên ký tự[Console]::WindowWidthdấu trừ ( ) của cửa sổ bảng điều khiển45, để hiển thị nhiềuFullNamegiá trị nhất có thể trong khi vẫn để trống cho hai cột còn lại; ngoài ra, để đảm bảo rằng việc cắt bớt (ký hiệu bằng…được áp dụng cho phần đầu của đường dẫn - để tên tệp / thư mục đó luôn được hiển thị - cột được căn phải (thông quaamục nhập, viết tắt củaalignment); nếu bạn muốn cắt bớt phần cuối của con đường, bỏ qua nhữngaentry (mà sau đó mặc địnhleft).Để biết thêm thông tin về cách dựa trên bảng băm (
@{ ... }) này để chỉ định cái gọi là các thuộc tính được tính toán choFormat-Table, bao gồm cách cắt bớt ngay từ đầu trong khi vẫn duy trì căn chỉnh bên trái , hãy xem câu trả lời này .