มีวิธีรับไฟล์ข้อมูลเมตาจากบรรทัดคำสั่งหรือไม่


19

มีวิธีรับเมตาดาต้าของไฟล์จากบรรทัดคำสั่งใน Windows XP หรือสูงกว่าหรือไม่

โดยเฉพาะฉันสนใจที่จะรับข้อมูลที่ปกติแล้วอาจเห็นบนแท็บ "รายละเอียด" ของกล่องโต้ตอบ "คุณสมบัติ" ของไฟล์ใน Windows 7 (แท็บ "เวอร์ชั่น" ใน XP) ภาพหน้าจอของทั้งคู่อยู่ด้านล่างเพื่อให้แนวคิด ของสิ่งที่ฉันหลังจาก

ถ้าเป็นไปได้ฉันควรทำสิ่งนี้ผ่านcmd.exeสิ่งอื่นที่เป็นมาตรฐานด้วย Windows XP SP3 ขึ้นไป หากเป็นไปไม่ได้ทางเลือกที่ฉันต้องการจะเป็น:

  • PowerShell
  • อรรถประโยชน์ SysInternals
  • ยูทิลิตี้ Nirsoft
  • เครื่องมืออื่น ๆ จากนักพัฒนาที่มีชื่อเสียงและเป็นที่รู้จักในทำนองเดียวกัน

ภาพหน้าจอของ Windows XP:
Windows XP - แท็บเวอร์ชั่นในคุณสมบัติไฟล์

ภาพหน้าจอ Windows 7:
Windows 7 - แท็บรายละเอียดในคุณสมบัติไฟล์


1
คุณสามารถติดตั้งFILEVERจากซีดี Windows
William Jackson

1
@WilliamJackson - ฟังดูเหมือนคำตอบที่เป็นไปได้ รังเกียจที่จะโพสต์มันเป็นหนึ่งเดียวและอาจจะทำให้มันดูแตกต่างออกไปเล็กน้อยจากข้อมูลบางส่วนที่อยู่ในบทความ KB นั้น? คุณสามารถแนะนำบางสิ่งสำหรับ Windows รุ่นที่สูงขึ้นได้หรือไม่ ฉันเข้าใจจากการค้นหาบางอย่างที่FILEVERไม่รวมอยู่ในซีดีเหล่านั้นและอาจไม่ใช่เครื่องมือที่รองรับสำหรับรุ่นเหล่านั้น
Iszi

คำตอบ:


20

คุณสามารถใช้WMIC.exeเพื่อให้ได้ประโยชน์สูงสุด:

C: \> wmic datafile โดยที่ Name = "C: \\ Windows \\ System32 \\ cmd.exe" รับผู้ผลิตชื่อรุ่น
ชื่อผู้ผลิตเวอร์ชั่น
Microsoft Corporation c: \ windows \ system32 \ cmd.exe 6.1.7601.17514

สังเกตการหลบหลีกของแบ็กสแลช\ในพา ธ (ไม่สามารถใช้งานได้)


ส่วนขยายของวิธีนี้เพื่อเปรียบเทียบรุ่นต่างๆในกลุ่ม: superuser.com/a/904535/131936
LogicDaemon

คุณสามารถรับข้อมูลเกี่ยวกับระบบปฏิบัติการใด ๆ ที่คุณต้องการสำหรับการดำเนินงานส่วนใหญ่ผ่าน WMI แต่มันมาพร้อมกับข้อแม้ที่สำคัญ มันค่อนข้างช้า คำสั่งของขนาดช้ากว่าเส้นทางที่ตรงที่สุด ที่กล่าวว่ามันทำงานสำหรับแบบสอบถามจำนวนมากและตรวจสอบ
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 อย่าลืมหลีกเลี่ยง\มิเช่นนั้นจะใช้งานไม่ได้


สิ่งนี้ใช้ไม่ได้ ...
ไม่ใช่ 2qubit

ขออภัยนี่ไม่ได้ผลสำหรับคุณ ฉันลองอีกครั้งแล้วใช้งานได้ Win7 สิทธิ์ผู้ดูแลระบบ พา ธ ไฟล์แบบเต็มและหนีออกมา '\'
S3DEV
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.