क्या कमांड लाइन से फ़ाइल मेटाडेटा प्राप्त करने का कोई तरीका है?


19

क्या विंडोज एक्सपी और इसके बाद के संस्करण में कमांड लाइन से फ़ाइल मेटाडेटा प्राप्त करने का एक तरीका है?

विशेष रूप से, मुझे जानकारी प्राप्त करने में दिलचस्पी है कि कोई व्यक्ति आमतौर पर विंडोज 7 में "गुण" संवाद के "विवरण" टैब पर देख सकता है (XP में "संस्करण" टैब।) दोनों के स्क्रीनशॉट एक विचार देने के लिए नीचे हैं। के बाद मैं क्या हूँ।

यदि संभव हो तो, मैं इसके बजाय cmd.exeविंडोज एक्सपी एसपी 3 और इसके बाद के संस्करण के साथ मानक के माध्यम से आता हूं । यदि यह संभव नहीं है, तो मेरा पसंदीदा विकल्प होगा:

  • शक्ति कोशिका
  • एक SysInternals उपयोगिता
  • एक Nirsoft उपयोगिता
  • इसी तरह के प्रतिष्ठित और अच्छी तरह से पहचाने गए डेवलपर से कुछ अन्य उपकरण।

Windows XP स्क्रीनशॉट:
Windows XP - फ़ाइल गुणों में संस्करण टैब

विंडोज 7 स्क्रीनशॉट:
विंडोज 7 - फ़ाइल गुणों में विवरण टैब


1
आप FILEVERविंडोज सीडी से इंस्टॉल कर सकते हैं ।
विलियम जैक्सन

1
@WilliamJackson - यह एक संभावित उत्तर की तरह लगता है। मन इसे एक के रूप में पोस्ट कर रहा है, और हो सकता है कि यह उस केबी लेख में जानकारी के कुछ के साथ थोड़ा बाहर निकाल दे? इसके अलावा, क्या आप विंडोज के उच्च संस्करणों के लिए कुछ सुझाव दे सकते हैं? मैं कुछ खोज से समझता हूं जो FILEVERउन सीडी में शामिल नहीं हैं, और इसलिए उन संस्करणों के लिए एक समर्थित उपकरण नहीं हो सकता है।
इस्ज़

जवाबों:


20

आप अधिकतर तरीके से वहां जाने के लिए WMIC.exe का उपयोग कर सकते हैं :

C: \> विकी डेटाफ़ाइल जहां नाम = "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 आत्मा के लिए वही।
Not2qubit

2

आप जिस चीज की तलाश कर रहे हैं, उसे dsofile.dll के संयोजन के साथ खींचा जा सकता है (जरूरत नहीं है अगर आपके पास ऑफिस स्थापित है) और ऑटोिट या कोई भी .NET भाषा।

मुझे एक पॉवरशेल विधि भी मिली , लेकिन मैं इसका परीक्षण नहीं कर पाया।

मैंने ऑटोिट के साथ थोड़ी स्क्रिप्ट लिखी थी जिसमें अभी भी कुछ ट्विकिंग की जरूरत है। मैं विस्टा पर हूं और मुझे कुछ dsofile.dll कॉल करने के लिए फ़ंक्शन नहीं मिल सकता है, जैसा कि मैं अपेक्षा करता हूं, हालांकि यह अभी भी कुछ आउटपुट प्रदान करता है जो आपको रुचि हो सकती है। मैं इस पर सुबह में काम करूंगा जब मेरी पहुंच होगी। एक XP और win7 VM के लिए। ध्यान दें कि आपको dsofile.dll को जहां भी स्थापित करना है, वहां 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.