Windows:命令行读取可执行文件的版本信息?

标签 windows batch-file command-line version portable-executable

Windows 是否有我可以在返回可执行 (.exe) 文件版本号的命令 shell 中运行的可执行文件?

我看到很多问题展示了如何从不同的语言中做到这一点,并引用了第三方软件来编写它,但我找不到一个简单的 shell 命令来做到这一点。如果我不需要安装任何东西,请加分。

它必须以普通用户身份运行。不是管理员。

最佳答案

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

您可以使用wmic 来完成。你可以把它打包成一个批处理文件

@echo off
    setlocal enableextensions

    set "file=%~1"
    if not defined file goto :eof
    if not exist "%file%" goto :eof

    set "vers="
    FOR /F "tokens=2 delims==" %%a in ('
        wmic datafile where name^="%file:\=\\%" get Version /value 
    ') do set "vers=%%a"

    echo(%file% = %vers% 

    endlocal

将其保存为(示例)getVersion.cmd 并调用为 getVersion.cmd "c:\windows\system32\msiexec.exe"

编辑以适应评论并且不需要管理员权限。在这种情况下,混合 cmd/javascript 文件用于查询 wmi。用法相同

@if (@this==@isBatch) @then
@echo off
    setlocal enableextensions

    set "file=%~f1"
    if not exist "%file%" goto :eof

    cscript //nologo //e:jscript "%~f0" /file:"%file%"

    endlocal

    exit /b
@end
    var file = WScript.Arguments.Named.Item('file').replace(/\\/g,'\\\\');
    var wmi = GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2')
    var files = new Enumerator(wmi.ExecQuery('Select Version from CIM_datafile where name=\''+file+'\'')) 

    while (!files.atEnd()){
        WScript.StdOut.WriteLine(files.item().Version);
        files.moveNext();
    };
    WScript.Quit(0)

关于Windows:命令行读取可执行文件的版本信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25648155/

相关文章:

windows - 短名称仅适用于 C 盘

batch-file - Windows 批处理文件 "start"命令未打开完整 URL

windows - 系统关机时如何运行bat文件

c++ - 从 Visual Studio 2017 运行 CMake 的 PACKAGE 目标

c++ - 无法将参数 1 从 'char' 转换为 'LPCWSTR'

windows - 使用批处理文件检查服务器是否已启动?

java - 作为命令,它可以在 cmd 提示符下正常运行,但不能从 java 代码运行

java - 如何强制 jar 使用(或运行 jar 的 jvm)utf-8 而不是系统的默认编码

windows-7 - 如何使用命令提示符运行现有的 Windows 7 任务

linux - 如果在一台 x86 主机上运行 2 个 type-2 VMX hypervisor 会怎样?