Komut satırından dosya meta verilerini almanın bir yolu var mı?


19

Windows XP ve sonraki sürümlerde komut satırından bir dosyanın meta verilerini almanın bir yolu var mı?

Özellikle, bir dosyanın normalde Windows 7'deki "Özellikler" iletişim kutusunun "Ayrıntılar" sekmesinde görebileceği bilgileri almakla ilgileniyorum. (XP'deki "Sürüm" sekmesi) Her iki ekran görüntüsü de aşağıdadır. peşindeyim.

Mümkünse, bunu cmd.exeWindows XP SP3 ve üstü ile standart olarak gelen bir şeyle yapmayı tercih ederim . Bu mümkün değilse, tercih ettiğim alternatifler:

  • Güç kalkanı
  • Bir SysInternals yardımcı programı
  • Bir Nirsoft yardımcı programı
  • Benzer saygın ve tanınmış bir geliştiriciden diğer bazı araçlar.

Windows XP ekran görüntüsü:
Windows XP - Dosya Özellikleri'ndeki Sürüm sekmesi

Windows 7 ekran görüntüsü:
Windows 7 - Dosya Özellikleri'ndeki Ayrıntılar sekmesi


1
FILEVERWindows CD'sinden yükleyebilirsiniz .
William Jackson

1
@WilliamJackson - Bu olası bir cevap gibi geliyor. Biri olarak gönderme ve belki de o KB makalede bulunan bazı bilgiler ile biraz et zihin? Ayrıca, Windows'un daha yüksek sürümleri için bir şeyler önerebilir misiniz? FILEVERBu CD'lerde bulunmayan bazı aramalardan anlıyorum ve bu sürümler için desteklenen bir araç olmayabilir.
Iszi

Yanıtlar:


20

Sen kullanabilirsiniz WMIC.exe orada yol en iyi şekilde:

C: \> wmic datafile burada Name = "C: \\ Windows \\ System32 \\ cmd.exe" Üretici, Ad, Sürüm olsun
Üretici Adı Versiyonu
Microsoft Corporation c: \ windows \ system32 \ cmd.exe 6.1.7601.17514

Yoldaki ters eğik çizgilerin kaçışına dikkat edin \(aksi halde çalışmaz).


toplu işteki sürümleri karşılaştırmak için bu yöntemin uzantısı: superuser.com/a/904535/131936
LogicDaemon

WMI aracılığıyla çoğu işlem için ihtiyacınız olan herhangi bir işletim sistemi bilgisini alabilirsiniz, ancak büyük bir uyarı ile birlikte gelir ; oldukça yavaş. Büyüklük sıraları, daha doğrudan rotaların çoğundan daha yavaştır. Bununla birlikte, birçok sorgu ve izleme için işe yaradığını söyledi .
kayleeFrye_onDeck

Bu bir hata verir: wmic : Unexpected switch at this level.W81'de, Iszi soulution için aynı.
not2qubit

2

Ne arıyorsunuz dsofile.dll (Office yüklüyse gerekmez) ve autoit veya herhangi bir .NET dili kombinasyonu ile çekilebilir .

Ayrıca bir powershell yöntemi buldum , ancak test edemedim.

Ben hala bazı tweaking ihtiyacı autoit ile küçük bir senaryo yazdı. Vista'dayım ve yine de ilginizi çekebilecek bazı çıktılar sağlasa da, beklediğim gibi çalışacak birkaç dsofile.dll çağrısını alamıyorum. Erişime sahip olduğum sabah bu konuda daha fazla çalışacağım bir XP ve win7 VM'ye. Dso işlevlerinin yolunu dsofile.dll dosyasını yüklediğiniz yere değiştirmeniz gerektiğini unutmayın.

#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

Sadece @bobbymcr 'in cevabını genişletmek için (ki çok yararlı buldum, teşekkür ederim!); LIST BRIEFveya LIST FULLseçeneklerini kullanarak komutu basitleştirebilir ve sonuçları genişletebilirsiniz .

> wmic datafile list /?Daha fazla ayrıntı için kontrol edin .

Bu çözüm bana yardımcı oldu:
> wmic datafile "c:\\path\\to\\file.exe" list full

Not: @bobbymcr tarafından belirtildiği gibi, kaçmayı unutmayın \, aksi takdirde çalışmaz.


Bu işe yaramıyor ...
not2qubit

Üzgünüm, bu senin için çalışmıyor. Sadece tekrar denedim ve işe yarıyor. Win7, yönetici hakları. Tam dosya yolu ve kaçtı '\'.
S3DEV
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.