2012-07-30 6 views
8

Estoy intentando escribir un comando de Windows para listar los archivos y sus últimos tiempos de acceso, ordenados por el tiempo de acceso.Comando del shell de Windows para mostrar el nombre del archivo y la última hora de acceso

he utilizado

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

Esto da salida a los archivos en el directorio y los subdirectorios en orden por última vez su acceso; sin embargo, también necesito que muestre el último tiempo de acceso también. ¿Cómo se logra esto?

Respuesta

9

desde dentro de un archivo por lotes:

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

Sin embargo, hay algunas cosas que hay que tener en cuenta:

  • Los archivos se clasifican por el acceso de marca de tiempo dentro de un directorio. Sí no ordena por marca de tiempo de acceso en todos los directorios. Tu código original tiene el mismo problema. Para ordenar entre directorios, se requiere analizar la marca de tiempo de acceso y convertirla en una cadena que se ordenará cronológicamente cuando se solicite mediante SORT. Algo como "aaaa-mm-dd hh24: mm". Incluso eso no es particularmente bueno porque no tienes acceso a los segundos. Puede usar WMIC DATAFILE para listar los nombres de los archivos con las últimas marcas de tiempo de acceso en un nivel de segundo nivel. Pero ¿por qué preocuparse, teniendo en cuenta que ...

  • La fecha y hora del último acceso mantenida por Windows es no fiable! Hay muchas situaciones en las que una aplicación puede leer un archivo y, sin embargo, la última marca de tiempo de acceso no se actualiza. He visto material de referencia en alguna parte que habla sobre eso, pero no recuerdo dónde.

Si aún piensa que desea obtener una lista de los archivos ordenados por la última fecha y hora de acceso para una jerarquía de carpetas completa, entonces el siguiente trabajo.Supongamos que desea listar todos los archivos en "c: \ prueba \"

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

La marca de tiempo tendrá el formato YYYYMMDDhhmmssddddddZZZZ donde

  • AAAA = año
  • MM = mes
  • DD = día
  • hh = hora (formato de 24 horas)
  • mm = minuto
  • ss = segundo
  • dddddd = micro segundos
  • ZZZZ = zona horaria, expresada como diferencia minutos desde GMT (la primera carácter es el signo)


EDITAR

El comodín buscar en WMIC causa un rendimiento terrible. Aquí hay una versión que recorre todas las carpetas en la jerarquía raíz, ejecutando WMIC contra cada carpeta específica (sin comodín). Tiene un rendimiento decente.

@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%" 
Cuestiones relacionadas