명령 행에서 파일 메타 데이터를 얻는 방법이 있습니까?


19

Windows XP 이상의 명령 행에서 파일의 메타 데이터를 얻는 방법이 있습니까?

특히 Windows 7에서 파일의 "속성"대화 상자에있는 "세부 사항"탭에서 일반적으로 볼 수있는 정보를 얻는 데 관심이 있습니다 (XP의 "버전"탭). 내가 뭘했는지

가능하다면 cmd.exeWindows XP SP3 이상에서 표준으로 제공되는 다른 방법을 사용하고 싶습니다 . 이것이 가능하지 않은 경우 선호하는 대안은 다음과 같습니다.

  • PowerShell
  • SysInternals 유틸리티
  • Nirsoft 유틸리티
  • 비슷하고 잘 알려진 개발자의 다른 도구.

Windows XP 스크린 샷 :
Windows XP-파일 속성의 버전 탭

Windows 7 스크린 샷 :
Windows 7-파일 속성의 세부 사항 탭


1
FILEVERWindows CD에서 설치할 수 있습니다 .
윌리엄 잭슨

1
@WilliamJackson-가능한 답변처럼 들립니다. 하나를 게시하고 KB 기사에있는 일부 정보로 약간 깎아 내고 있습니까? 또한 더 높은 버전의 Windows 용으로 제안 할 수 있습니까? FILEVER해당 CD에 포함되지 않은 일부 검색을 이해 하므로 해당 버전에서 지원되는 도구가 아닐 수 있습니다.
Iszi

답변:


20

WMIC.exe 를 사용 하여 대부분의 방법을 얻을 수 있습니다 .

C : \> wmic 데이터 파일 여기서 Name = "C : \\ Windows \\ System32 \\ cmd.exe"는 제조업체, 이름, 버전을 가져옵니다.
제조업체 이름 버전
Microsoft Corporation c : \ windows \ system32 \ cmd.exe 6.1.7601.17514

\경로 에서 백 슬래시 를 이스케이프 처리 하십시오 (그렇지 않으면 작동하지 않음).


이 방법의 확장은 일괄 적으로 버전을 비교 : superuser.com/a/904535/131936
LogicDaemon에게

WMI를 통해 대부분의 운영에 필요한 모든 OS 정보를 얻을 수 있지만 주요 경고 사항이 있습니다. 꽤 느립니다. 대부분의 직접 경로보다 속도가 느립니다. 즉, 많은 쿼리 및 모니터링에 효과적입니다 .
kayleeFrye_onDeck

이 오류 wmic : Unexpected switch at this level.는 W81에서 Iszi soulution과 동일합니다.
not2qubit

2

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

0

위의 @bobbymcr 답변을 확장하면됩니다 (매우 도움이되었습니다. 감사합니다!); LIST BRIEF또는 LIST FULL옵션 을 사용하여 명령을 단순화하고 결과를 넓힐 수 있습니다.

> wmic datafile list /?자세한 내용을 확인 하십시오.

이 솔루션이 도움이되었습니다.
> wmic datafile "c:\\path\\to\\file.exe" list full

참고 : @bobbymcr에서 언급했듯이을 피하십시오 \. 그렇지 않으면 작동하지 않습니다.


이 작동하지 않습니다 ...
not2qubit

죄송합니다.이 기능이 작동하지 않습니다. 방금 다시 시도했는데 작동합니다. Win7, 관리자 권한. 전체 파일 경로이며 이스케이프 된 '\'.
S3DEV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.