3

Windows エクスプローラーでディレクトリを見ると、そのディレクトリにある DLL の ProductName プロパティと ProductVersion プロパティが表示されます。

この DLL リストを ProductName と ProductVersion とともにテキスト ファイルにエクスポートする必要があります。

実行するc:\>dir *.dll > test.logと、test.log に ProductName と ProductVersion が記録されません。

これらのプロパティをファイル名とともにファイルにエクスポートするのを手伝ってもらえますか?

フリーウェアのツールやその他のdirスイッチであっても、それは役に立ちます。

4

6 に答える 6

2

PowerShellは、Microsoft から無料で (ビールと同じように) 入手できます。

以下は、Windows ディレクトリ内のすべての dll の製品名、製品バージョン、およびファイル名を test.log に吐き出すためのワンライナーです。

dir c:\windows\*.dll | % {[System.Diagnostics.FileVersionInfo]::GetVersionInfo($_)} | % { $_.ProductName + ", " + $_.ProductVersion + ", " + $_.FileName} > test.log

長い行ですが、コマンド プロンプトで はまだ1 行です。

PowerShell の愛好家は、おそらく上記の内容をさらに要約できるでしょう。PowerShell を使用すると、コマンド ラインから System.Diagnostics.FileVersionInfoなどの .Net 基本クラス ライブラリ (または独自のアセンブリ) を使用できることに注意してください。

まだ PowerShell を使用したことがない場合、特に .Net 開発者の場合は、お楽しみがあります :)

于 2008-12-01T20:57:44.523 に答える
1

VBScript を使用すると、次のことができます。

Set objShell = CreateObject ("Shell.Application")
Set objFolder = objShell.Namespace ("C:\Scripts")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim arrHeaders(40)

For i = 0 to 40
    arrHeaders(i) = objFolder.GetDetailsOf (objFolder.Items, i)
Next

For Each strFileName in objFolder.Items
    For i = 0 to 40
        Wscript.echo arrHeaders(i) & ": " & objFolder.GetDetailsOf (strFileName, i) 
    Next
    Wscript.Echo
Next
于 2008-12-01T20:02:15.010 に答える
1

これは、.NET アプリケーションを使用すると非常に簡単に実行できます。

using System;
using System.Diagnostics;

static class MainClass
{
    static void Main(string[] args)
    {

        FileVersionInfo info = FileVersionInfo.GetVersionInfo("c:\\test.txt");

        // Display version information.
        Console.WriteLine("Checking File: " + info.FileName);
        Console.WriteLine("Product Name: " + info.ProductName);
        Console.WriteLine("Product Version: " + info.ProductVersion);
        Console.WriteLine("Company Name: " + info.CompanyName);

    }
}

明らかに、指定したディレクトリ内のすべてのファイルを取得する関数を追加する必要があります。

于 2008-12-01T20:10:22.810 に答える
1

リストへの VB.Net バージョンの追加:

Sub CreateLog(ByVal Logfile As String, ByVal PathToLog As String, Optional ByVal SearchPattern As String = "*.*")

    Dim FileInfo As FileVersionInfo
    Dim ret As String = ""
    For Each File As String In IO.Directory.GetFiles(PathToLog, SearchPattern)
        FileInfo = FileVersionInfo.GetVersionInfo(File)
        If FileInfo.ProductName & FileInfo.ProductVersion <> "" Then
            ret &= FileInfo.ProductName & ", " & FileInfo.ProductVersion & vbCrLf
        End If
    Next

    IO.File.WriteAllText(Logfile, ret)

End Sub

次の方法で呼び出します: CreateLog("c:\log.txt", "c:\windows", "*.dll")

編集:検索パターンを追加しました。

于 2008-12-01T20:24:52.873 に答える
0

私はこのソフトウェアとまったく話すことができませんが、これはあなたが探していることをするようです:

http://www.softpedia.com/get/Programming/Other-Programming-Files/STRFINFO.shtml

SYNTAX
~~~~~~
StrFInfo[.EXE] ExeDllOcxFileName  [Property1  [Property2 ...]]

COMMON PROPERTIES
~~~~~~~~~~~~~~~~~
FileDescription  FileVersion InternalName
OriginalFileName ProductName ProductVersion
CompanyName LegalCopyRight $Translation
于 2008-12-01T20:06:59.010 に答える
0

興味深いことに、私はこの GetDetailsOf 関数を知りませんでした。
任意のサイズについて疑問に思いました...
制限が何であるかわかりません。これは、フォルダー間または少なくともユーザー設定などによって異なるように見えるため、より柔軟なものを作成しました:

Set shell = CreateObject("Shell.Application")
Set folder = shell.Namespace("D:\Documents")

Set fso = CreateObject("Scripting.FileSystemObject")
For Each fileName in folder.Items
  i = 0
  emptyNb = 0
  Do
    detail = folder.GetDetailsOf(folder.Items, i)
    If detail = "" Then
      emptyNb = emptyNb + 1
    Else
      detailValue = folder.GetDetailsOf(fileName, i)
      If detailValue <> "" Then
        Wscript.Echo i & " " & detail & ": " & detailValue
      End If
      emptyNb = 0
    End If
    i = i + 1
  Loop While emptyNb < 3 ' Arbirary, adjust as you see fit
  detailValue = folder.GetDetailsOf(fileName, -1)
  If detailValue <> "" Then
    Wscript.Echo "Tooltip:" & vbCrLf & detailValue
  End If
  Wscript.Echo
Next

質問に答えるために、detail探している情報と等しい場合を確認し、これらの値のみを表示できます。

于 2008-12-01T21:43:59.140 に答える