Есть ли способ получить метаданные файлов из командной строки?

Есть ли способ получить метаданные файла из командной строки в Windows XP и выше?

В частности, я заинтересован в получении информации, которую обычно можно увидеть на вкладке «Сведения» в диалоговом окне «Свойства» файла в Windows 7. (вкладка «Версия» в XP.) Скриншоты обоих приведены ниже, чтобы дать представление Из того, что мне нужно.

Если возможно, я предпочел бы сделать это через cmd.exe или что-то еще, что поставляется с Windows XP SP3 и выше. Если это невозможно, мои предпочтительные альтернативы:

  • PowerShell
  • Утилита SysInternals
  • Утилита Nirsoft
  • Некоторый другой инструмент от аналогичного авторитетного и хорошо известного разработчика.

Снимок экрана Windows XP:
Вкладка «Свойства Windows» - вкладка «Версия»

Снимок экрана Windows 7:
Windows 7 - вкладка «Сведения» в «Свойства файла»

Вы можете использовать WMIC.exe, чтобы получить большую часть пути:

 C: \> wmic datafile где Name = "C: \\ Windows \\ System32 \\ cmd.exe" получить имя производителя, имя, версия
 Версия производителя
 Microsoft Corporation c: \ windows \ system32 \ cmd.exe 6.1.7601.17514

Обратите внимание на экранирование обратных косых \ в пути (это не работает иначе).

То, что вы ищете, можно вытащить с помощью комбинации dsofile.dll (не требуется, если у вас установлен Office) и autoit или любой язык .NET.

Я также нашел метод powershell , но я не смог его протестировать.

Я написал небольшой скрипт с autoit, который все еще нуждается в некоторой настройке. Я нахожусь в Vista, и я не могу заставить несколько вызовов dsofile.dll функционировать так, как я ожидал бы, хотя он по-прежнему предоставляет некоторые результаты, которые могут вас заинтересовать. Я буду работать над этим больше утром, когда у меня будет доступ К XP и win7 VM. Обратите внимание, что вам нужно изменить путь в функциях dll везде, где вы устанавливаете 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 

Просто чтобы расширить ответ на @bobbymcr выше (который я нашел очень полезным, спасибо!); Вы можете упростить команду и расширить результаты, используя опции LIST BRIEF или LIST FULL .

Проверить > wmic datafile list /? Больше подробностей.

Это решение помогло мне:
> wmic datafile "c:\\path\\to\\file.exe" list full

Примечание: Как упоминалось @bobbymcr, не забудьте избежать \ , иначе он не будет работать.

  • Можно ли удалить папку «C: \ WINDOWS \ Installer \ $ PatchCache $»?
  • Можно ли обновить Windows XP после апреля 2014 года?
  • Установка XP из одного раздела
  • Пустой значок в панели управления?
  • Почему отсоединение моего флеш-диска приводит к синему экрану?
  • Почему мой настольный ПК не может получить IP-адрес от маршрутизатора?
  • Простой, простой способ создания символических ссылок в Windows?
  • Выяснение, какое приложение использует веб-камеру
  • Поиск в папке Windows
  • Блокировать весь сетевой трафик с / на ноутбук, кроме явных приложений / протоколов / целей?
  • Установка Windows XP и запуск с USB-накопителя
  • Давайте будем гением компьютера.