Độ dài Powershell sẽ không hiển thị trong đầu ra của Get-ChildItem

Dec 20 2020

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 LastAccessTimeLengthbị thiếu từ đầu ra.

PowerShell ScreenShot

Tôi đang làm gì sai?

Trả lời

1 AshokPrasath Dec 20 2020 at 23:34

Điều này sẽ hoạt động:

Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv

3 mklement0 Dec 21 2020 at 01:07

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 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ác FullNamegiá 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, FullName
    
  • Nế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-List
    
  • Nế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 300
    
    • Nế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ỉ địnhkhô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ọi select( 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, LastAccessTime
    
    • Lưu ý cách chiều rộng cột ( wmục nhập, viết tắt của width) dựa trên ký tự [Console]::WindowWidthdấu trừ ( ) của cửa sổ bảng điều khiển 45, để hiển thị nhiều FullNamegiá 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 qua amục nhập, viết tắt của alignment); nếu bạn muốn cắt bớt phần cuối của con đường, bỏ qua những aentry (mà sau đó mặc định left).

    • Để 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 cho Format-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 .