【问题标题】:Windows Batch File for getting file name and version on a folder用于获取文件夹上的文件名和版本的 Windows 批处理文件
【发布时间】:2017-07-24 05:40:10
【问题描述】:

专家,

要求是获取目录路径下的所有Filename和FileVersion

示例:

Directory_Path = C:\Program Files (x86)\Oracle\Document Capture

当我运行批处理时,它应该理想地列出文件的所有文件名和相关的文件版本(不应该考虑任何没有版本的文件或不应该考虑任何文件夹)

我的预期输出:

Filename   Fileversion

--------   -----------

vabc.dll   1.3

vabd.dll   1.3

vace.dll   1.4

我发现这适用于我们的 Windows 2008 R2

wmic datafile where name="C:\\Windows\\System32\\msiexec.exe" get Version /value 

来源=Windows: Command line to read version info of an executable file?

但我想不出办法将每个文件名自动传递到这个命令中,并让我得到一个文本文件中的输出。

感谢任何帮助

【问题讨论】:

    标签: windows batch-file command-line version


    【解决方案1】:

    最简单的解决方案是在 WHERE 子句中指定驱动器和路径,并让 WMIC 发现文件名。您还可以在 where 子句中指定 VERSION IS NOT NULL。

    列出的文件名将只是基本文件名,没有扩展名。扩展程序列中提供了扩展程序(太棒了!)。

    wmic datafile where "drive='c:' and path='\\Program Files (x86)\\Oracle\\Document Capture\\' and version is not null" get FileName, Extension, Version
    

    无论您请求什么顺序,列始终按字母顺序(按名称)列出。所以你应该得到如下输出:

    Extension  FileName  Version
    dll        vabc      1.3
    dll        vabd      1.3
    dll        vace      1.3
    

    或者您可以请求名称列而不是文件名和扩展名,但这将包括完整路径。

    Name                                                     Version
    C:\Program Files (x86)\Oracle\Document Capture\vabc.dll  1.3
    C:\Program Files (x86)\Oracle\Document Capture\vabd.dll  1.3
    C:\Program Files (x86)\Oracle\Document Capture\vace.dll  1.4
    

    另一个选项是使用 FOR 循环来迭代所有文件,然后在由 FOR /F 解析的单独 WMIC 调用中传递每个文件的完整路径。 FOR /F 如何将 WMIC unicode 输出转换为 ansi 有一个不幸的“功能”(又名错误),这样所有行都有一个不需要的尾随回车符 (\r),这可能导致各种问题。多余的尾随 \r 被额外的 FOR /F 语句消除。

    不需要 VERSION IS NOT NULL 子句,因为这对 FOR /F 语句将删除只包含空格的行。

    @echo off
    set "loc=C:\Program Files (x86)\Oracle\Document Capture\"
    pushd "%loc%"
    for %%F in (*) do for /f "skip=1 tokens=*" %%A in (
      'wmic datafile where "name='%loc:\=\\%%%F'" get version 2^>nul'
    ) do for /f "delims=" %%V in ("%%A") do echo %%F  %%V
    popd
    

    输出应如下所示:

    vabc.dll  1.3
    vabd.dll  1.3
    vace.dll  1.4
    

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2012-10-24
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2014-12-09
      • 2012-06-16
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多