2012-07-30 25 views
8

Tôi đang cố viết lệnh Windows để liệt kê các tệp và thời gian truy cập cuối cùng của chúng, được sắp xếp theo thời gian truy cập.Lệnh Windows Shell để hiển thị tên tệp và thời gian truy cập lần cuối

Tôi đã sử dụng

dir [directory] /O:D /T:A /S /B > output.txt 

này kết quả đầu ra các tập tin trong thư mục và thư mục con trong trật tự theo thời gian truy cập cuối cùng của họ; tuy nhiên tôi cũng cần nó để xuất ra thời gian truy cập cuối cùng. Làm thế nào điều này được thực hiện?

Trả lời

9

từ bên trong một tập tin batch:

>output.txt (
    for /f "delims=" %%F in ('dir /o:d /t:a /s /b "c:\myPath\*"') @echo %%~tF %%F 
) 

Tuy nhiên, có một số điều bạn cần phải nhận thức được:

  • Các tập tin được sắp xếp theo truy cập timestamp trong một thư mục. Nó không không sắp xếp theo dấu thời gian truy cập trên tất cả các thư mục. Mã ban đầu của bạn có cùng một vấn đề. Để sắp xếp các thư mục yêu cầu phân tích cú pháp dấu thời gian truy cập và chuyển đổi nó thành chuỗi sẽ sắp xếp theo thứ tự thời gian khi được sắp xếp qua SORT. Một cái gì đó như "yyyy-mm-dd hh24: mm". Thậm chí điều đó không phải là đặc biệt tốt bởi vì bạn không có quyền truy cập vào giây. Bạn có thể sử dụng WMIC DATAFILE để liệt kê tên tệp có dấu thời gian truy cập cuối cùng ở cấp phụ. Nhưng tại sao bận tâm, xem xét rằng ...

  • Các dấu thời gian truy cập cuối cùng duy trì bởi Windows là không đáng tin cậy! Có nhiều tình huống trong đó ứng dụng có thể đọc tệp nhưng dấu thời gian truy cập cuối cùng không được cập nhật. Tôi đã nhìn thấy một số tài liệu tham khảo một nơi nào đó mà nói về điều đó, nhưng tôi không nhớ ở đâu.

Nếu bạn vẫn muốn có danh sách tệp được sắp xếp theo dấu thời gian truy cập cuối cùng cho toàn bộ hệ thống phân cấp thư mục thì thao tác sau sẽ hoạt động.Giả sử bạn muốn liệt kê tất cả các file trong mục "c: \ test \"

wmic datafile where "drive='c:' and path like '\\test\\%'" get name, lastaccessed | sort 

Các dấu thời gian sẽ có định dạng YYYYMMDDhhmmssddddddZZZZ nơi

  • YYYY = năm
  • MM = tháng
  • DD = ngày
  • hh = giờ (định dạng 24 giờ)
  • mm = phút
  • ss = giây
  • dddddd = vi giây
  • ZZZZ = múi giờ, thể hiện dưới dạng phút chênh lệch từ giờ (nhân vật 1 là dấu hiệu)


EDIT

Các ký tự đại diện tìm kiếm trong WMIC gây ra hiệu suất khủng khiếp. Đây là một phiên bản lặp qua tất cả các thư mục trong hệ thống phân cấp gốc, chạy WMIC với mỗi thư mục cụ thể (không có ký tự đại diện). Nó có hiệu suất khá.

@echo off 
setlocal disableDelayedExpansion 
set "root=c:\test" 
set "output=output.txt" 

set "tempFile=%temp%\dir_ts_%random%.txt" 
(
    for /d /r "%root%" %%F in (.) do (
    set "folder=%%~pnxF\" 
    set "drive=%%~dF" 
    setlocal enableDelayedExpansion 
    2>nul wmic datafile where "drive='!drive!' and path='!folder:\=\\!'" get name, lastaccessed|findstr /brc:[0-9] 
    endlocal 
) 
) >"%tempFile% 
sort "%tempFile%" >"%output%" 
del "%tempFile%" 
Các vấn đề liên quan