কমান্ড লাইন থেকে ফাইল মেটাডেটা পাওয়ার কোনও উপায় আছে কি?


19

উইন্ডোজ এক্সপি এবং উপরের কমান্ড লাইন থেকে কোনও ফাইলের মেটাডেটা পাওয়ার কোনও উপায় আছে কি?

বিশেষত, আমি উইন্ডোজ in. এর একটি "প্রোপার্টি" ডায়ালগের "বিশদ" ট্যাবে সাধারণত তথ্যটি পেতে আগ্রহী, সে সম্পর্কে ধারণা দেওয়ার জন্য, উভয়ের স্ক্রিনশট নীচে রয়েছে, ধারণা দেওয়ার জন্য আমি পরে কি

যদি সম্ভব হয় তবে আমি এটির পরিবর্তে cmd.exeবা অন্য কিছু যা উইন্ডোজ এক্সপি এসপি 3 এবং তারপরে স্ট্যান্ডার্ড আসে তার মাধ্যমে করব । যদি এটি সম্ভব না হয় তবে আমার পছন্দসই বিকল্পগুলি হ'ল:

  • শক্তির উৎস
  • একটি SysInternals ইউটিলিটি
  • একটি নিসফ্ট ইউটিলিটি
  • একইভাবে নামী এবং সুপরিচিত স্বীকৃত বিকাশকারী থেকে অন্য কিছু সরঞ্জাম।

উইন্ডোজ এক্সপি স্ক্রিনশট:
উইন্ডোজ এক্সপি - ফাইল বৈশিষ্ট্যে সংস্করণ ট্যাব

উইন্ডোজ 7 স্ক্রিনশট:
উইন্ডোজ 7 - ফাইল বৈশিষ্ট্যে বিশদ ট্যাব


1
আপনি FILEVERউইন্ডোজ সিডি থেকে ইনস্টল করতে পারেন ।
উইলিয়াম জ্যাকসন

1
@ উইলিয়াম জ্যাকসন - এটি একটি সম্ভাব্য উত্তরের মতো শোনাচ্ছে। এটিকে একটি হিসাবে পোস্ট করা, এবং সম্ভবত সেই কেবি নিবন্ধে থাকা তথ্যের সাথে এটি কিছুটা ছড়িয়ে দিচ্ছে? এছাড়াও, আপনি উইন্ডোজের উচ্চতর সংস্করণগুলির জন্য কিছু প্রস্তাব দিতে পারেন? আমি এমন কিছু অনুসন্ধান থেকে বুঝতে পেরেছি যা FILEVERসেই সিডিগুলিতে অন্তর্ভুক্ত নেই এবং তাই এই সংস্করণগুলির জন্য কোনও সমর্থিত সরঞ্জাম নাও হতে পারে।
ইসজি

উত্তর:


20

আপনি বেশিরভাগ রাস্তা পেতে WMIC.exe ব্যবহার করতে পারেন :

সি: \> ডাব্লিমিআই ডেটা ফাইল যেখানে নাম = "সি: \\ উইন্ডোজ \\ সিস্টেম 32 \\ সেমিডি.এক্সই" উত্পাদনকারী, নাম, সংস্করণ পান
প্রস্তুতকারকের নাম সংস্করণ
মাইক্রোসফ্ট কর্পোরেশন সি: \ উইন্ডোজ \ সিস্টেম 32 \ সেমিডি.এক্সে 6.1.7601.17514

\পথে ব্যাকস্ল্যাশগুলির পলায়নের বিষয়টি লক্ষ্য করুন (এটি অন্যথায় কাজ করে না)।


কোনও ব্যাচের সংস্করণগুলির তুলনা করার জন্য এই পদ্ধতির সম্প্রসারণ: superuser.com/a/904535/131936
লজিকডেমোন

আপনি ডাব্লুএমআইয়ের মাধ্যমে বেশিরভাগ অপারেশনের জন্য আপনার যে কোনও ওএসের তথ্য প্রয়োজন কেবল সে সম্পর্কে পেতে পারেন তবে এটি একটি বড় সাবধানতা সহ আসে ; এটা বেশ ধীর। সর্বাধিক প্রত্যক্ষ রুটের চেয়ে ধীরে ধীরে মাত্রার অর্ডার। এটি বলেছে, এটি প্রচুর অনুসন্ধান এবং পর্যবেক্ষণের জন্য কাজ করে ।
kayleeFrye_onDeck

এটি একটি ত্রুটি দেয়: wmic : Unexpected switch at this level.ডাব্লু 8১-এ, ইসজি আত্মাচরণের ক্ষেত্রে একই।
not2qubit

2

আপনি যা সন্ধান করছেন তা dsofile.dll এর সংমিশ্রণে টানা যেতে পারে (আপনার অফিস ইনস্টল করা থাকলে প্রয়োজন হয় না) এবং স্বয়ংক্রিয় বা কোন নেট ভাষা ব্যবহার করুন।

আমি পাওয়ারশেল পদ্ধতিটিও পেয়েছি , তবে আমি এটি পরীক্ষা করতে সক্ষম হইনি।

আমি অটোইট দিয়ে একটি ছোট স্ক্রিপ্ট লিখেছিলাম যা এখনও কিছু টুইট করার প্রয়োজন। আমি ভিস্টায় আছি এবং আমি আশা করব বলে কাজ করতে কয়েকটা ডেসফিল.ডিল কল পেতে পারি না, যদিও এটি এখনও আপনার আগ্রহী হতে পারে এমন কিছু আউটপুট সরবরাহ করে I'll যখন আমি অ্যাক্সেস পাব তখন আমি এই বিষয়ে আরও কাজ করব একটি এক্সপি এবং win7 ভিএম। নোট করুন যে আপনি 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

কেবল উপরে উপরের @ বিবিএমক্রির উত্তরের সম্প্রসারণ (যা আমি খুব সহায়ক বলে মনে করি, আপনাকে ধন্যবাদ!); আপনি আদেশটি সহজ করতে পারেন এবং বিকল্পগুলি ব্যবহার করে LIST BRIEFবা LIST FULLবিকল্পগুলি ব্যবহার করতে পারেন ।

> wmic datafile list /?আরও বিশদ জন্য পরীক্ষা করুন।

এই সমাধানটি আমাকে সহায়তা করেছিল:
> wmic datafile "c:\\path\\to\\file.exe" list full

দ্রষ্টব্য: @ ববিএমসিআর দ্বারা উল্লিখিত হিসাবে, এড়িয়ে চলা মনে রাখবেন \, অন্যথায় এটি কাজ করবে না।


এটি কাজ করে না ...
not 2qubit

দুঃখিত এটি আপনার পক্ষে কাজ করছে না। আমি এটি আবার চেষ্টা করেছি এবং এটি কাজ করে। Win7, প্রশাসক অধিকার। পুরো ফাইল পাথ, এবং '\' থেকে পালিয়ে গেছে।
এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.