20 votos

Hay una manera de obtener los metadatos de los archivos desde la línea de comandos?

Hay una manera de obtener los metadatos de un archivo desde la línea de comandos en Windows XP y anteriores?

En particular, estoy interesado en conseguir la información que uno podría normalmente vemos en la pestaña "Details" de un archivo de diálogo "Propiedades" en Windows 7. (Ficha"versión" en XP). Capturas de pantalla de ambos están por debajo, para dar una idea de lo que estoy después.

Si es posible, prefiero hacer esto a través de la cmd.exe o algo que viene de serie con Windows XP SP3 o superior. Si esto no es posible, mi preferida de las alternativas serían:

  • PowerShell
  • Una de SysInternals utilidad
  • Una utilidad de Nirsoft
  • Otra herramienta de una manera similar de buena reputación y bien reconocido desarrollador.

Windows XP captura de pantalla:
Windows XP - Version tab in File Properties

Windows 7 captura de pantalla:
Windows 7 - Details tab in File Properties

20voto

killdash10 Puntos 528

Puede utilizar WMIC.exe para obtener la mayor parte del camino:

C:\>wmic datafile donde Name="C:\\Windows\\System32\\cmd.exe" obtener Fabricante,Nombre,Versión,
Nombre Del Fabricante De La Versión
Microsoft Corporation c:\windows\system32\cmd.exe 6.1.7601.17514

Nota el escape de las barras diagonales inversas \ en la ruta (no funciona de otra manera).

2voto

MaQleod Puntos 11107

Lo que usted está buscando puede ser tirado con una combinación de dsofile.dll (no es necesario si usted tiene instalado Office) y autoit o cualquier .NET lenguaje.

También me encontré con un powershell método, pero no he sido capaz de probarlo.

Escribí un pequeño script con autoit que todavía necesita algunos ajustes. Estoy en la Vista y no puedo obtener el par de dsofile.dll las llamadas a la función como cabría esperar, a pesar de que todavía proporciona una salida que usted podría estar interesado en. Voy a trabajar en esto más en la mañana cuando tengo acceso a un XP y win7 VM. Tenga en cuenta que usted necesita para cambiar la ruta de acceso en las funciones dll al lugar donde se instale dsofile.dll.

#include <file.au3>
Dim $file, $objFile, $Path, $encoding, $attrib, $attributes, $dt, $stamp, $szDrive, $szDir, $szFName, $szExt

If $CmdLine[0] = 0 Then
    ConsoleWrite("You must specify a file")
Else
    $file = $CmdLine[1]
    If FileExists($file) Then
        _DLLstartup()
        $objFile = ObjCreate("DSOFile.OleDocumentProperties")
        If Not IsObj($objFile) Then Exit
        $objFile.Open(FileGetLongName($file))
        $Path = _PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
        ConsoleWrite("Filename: " & $Path[3] & $Path[4] & @CRLF)
        ConsoleWrite("Size: " & FileGetSize($file) & " bytes" & @CRLF)
        ConsoleWrite("Version: " & FileGetVersion($file) & @CRLF)
        ConsoleWrite("Company: " & $objFile.SummaryProperties.Company & @CRLF)
        ConsoleWrite("Author: " & $objFile.SummaryProperties.Author & @CRLF)
        $encoding = FileGetEncoding($file)
            Select
            Case $encoding = 0
                $encoding = "ANSI"
            Case $encoding = 32
                $encoding = "UTF16 Little Endian"
            Case $encoding = 64
                $encoding = "UTF16 Big Endian"
            Case $encoding = 128
                $encoding = "UTF8 (with BOM)"
            Case $encoding = 256
                $encoding = "UTF8 (without BOM)"
            EndSelect
        ConsoleWrite("Encoding: " & $encoding & @CRLF)
        $attrib = FileGetAttrib($file)
        $attributes = ""
            If StringInStr($attrib, "R") <> 0 Then
                $attributes = $attributes & " READONLY"
            EndIf
            If StringInStr($attrib, "A") <> 0 Then
                $attributes = $attributes & " ARCHIVE"
            EndIf
            If StringInStr($attrib, "S") <> 0 Then
                $attributes = $attributes & " SYSTEM"
            EndIf
            If StringInStr($attrib, "H") <> 0 Then
                $attributes = $attributes & " HIDDEN"
            EndIf
            If StringInStr($attrib, "N") <> 0 Then
                $attributes = $attributes & " NORMAL"
            EndIf
            If StringInStr($attrib, "D") <> 0 Then
                $attributes = $attributes & " DIRECTORY"
            EndIf
            If StringInStr($attrib, "O") <> 0 Then
                $attributes = $attributes & " OFFLINE"
            EndIf
            If StringInStr($attrib, "C") <> 0 Then
                $attributes = $attributes & " COMPRESSED"
            EndIf
            If StringInStr($attrib, "T") <> 0 Then
                $attributes = $attributes & " TEMPORARY"
            EndIf
        ConsoleWrite("Attributes:" & $attributes & @CRLF)
        $dt = FileGetTime($file, 1)
        $stamp = $dt[0] & "-" & $dt[1] & "-" & $dt[2] & " " & $dt[3] & ":" & $dt[4] & ":" & $dt[5]
        ConsoleWrite("Created: " & $stamp & @CRLF)
        $dt = FileGetTime($file, 0)
        $stamp = $dt[0] & "-" & $dt[1] & "-" & $dt[2] & " " & $dt[3] & ":" & $dt[4] & ":" & $dt[5]
        ConsoleWrite("Accessed: " & $stamp & @CRLF)
        $dt = FileGetTime($file, 2)
        $stamp = $dt[0] & "-" & $dt[1] & "-" & $dt[2] & " " & $dt[3] & ":" & $dt[4] & ":" & $dt[5]
        ConsoleWrite("Modified: " & $stamp & @CRLF)
        ConsoleWrite("Short Name: " & FileGetShortName($file, 1) & @CRLF)
        ConsoleWrite("Long Name: " & FileGetLongName($file, 1))
        $objFile.Close
        _DLLshutdown()
    Else
        ConsoleWrite("Can't find file")
    EndIf
EndIf

Func _DLLstartup($DLLpath = '')  ;borrowed from Andrew Goulart
    If $DLLpath = Default Or $DLLpath = '' Then $DLLpath = "C:\DsoFile\dsofile.dll";@ScriptDir & '\dsofile.dll'
    ShellExecuteWait('regsvr32', '/s /i ' & $DLLpath, @WindowsDir, 'open', @SW_HIDE)
EndFunc

Func _DLLshutdown($DLLpath = '') ;borrowed from Andrew Goulart
    If $DLLpath = Default Or $DLLpath = '' Then $DLLpath = "C:\DsoFile\dsofile.dll";@ScriptDir & '\dsofile.dll'
    ShellExecuteWait('regsvr32', ' /s /u ' & $DLLpath, @WindowsDir, 'open', @SW_HIDE)
EndFunc

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: