从dll文件中仅获取版本中的数字

问题描述 投票:2回答:5

我正在尝试获取.dll文件的版本,但只获取版本号。

我找到了代码

wmic datafile where name='C:\\...\\MY_FILE.dll' get version

此代码返回:

Version
3.56.0.1

我需要返回只有'3.56.0.1',这可以保存在一个变量中,我可以在回调后调用。

set var="HOW DO I DO?"
echo %var%

我怎么能得到这个?

我也可以使用下面的代码,但在这种格式中,我认为它更难

wmic datafile where name='C:\\...\\MY_FILE.dll' get version /format:list

此代码返回:

Version=3.56.0.1
batch-file cmd wmic
5个回答
3
投票

与发布的内容类似,存在细微差别。

一个

@For /F "Delims=" %%A In ('WMIC DataFile Where "Name='C:\\...\\MY_FILE.dll'" Get Version /Value 2^>Nul')Do @For /F "Tokens=*" %%B In ("%%A")Do @Set "%%B"
@Echo(%Version%&Pause

一个版本:

For /F "Delims=" %A In ('WMIC DataFile Where "Name='C:\\...\\MY_FILE.dll'" Get Version /Value 2^>Nul')Do @For /F "Tokens=*" %B In ("%A")Do @Set "%B"

变量%Version%应该是set到当地环境。


2
投票
  • 你需要用for /f解析。
  • 另一个for /f修复破碎的WMIC输出。

在命令行上(使用windows dll):

For /f "usebackqdelims=" %A in (`wmic datafile where name^='C:\\Windows\\System32\\authui.dll' get version /format:list^|findstr "Version"`) do @For /F "delims=" %B in ("%A") do @Set "%B"
set Version
Version=10.0.17134.1

在批处理文件中加倍for meta变量的百分号


2
投票

你应该使用:

@echo off

for /F "delims== tokens=2" %%A IN ('wmic datafile where name^="C:\\...\\MY_FILE.dll" get version /format:list') do (
    for %%B IN ("%%A") do set "var_name=%%~B"
)
echo %var_name%

它循环遍历您的命令,并根据指定的分隔符(qazxsw poi)查找第二个标记。

由于=不寻常的行结尾(wmic),你应该使用双<CR><CR><LF>循环。


2
投票

所以你需要一个for循环才能做到这一点..通过运行for中的for /?来查看更多帮助

cmd.exe

请注意,帮助不会帮助您使用@echo off for /f "tokens=1,* delims==" %%i in ('wmic datafile where name^="C:\\...\\MY_FILE.dll" get version /format:list') do if not defined var set var=%%j echo %var% 上使用的脱字符转义符,但是您可以在此处找到帮助。


0
投票

如果您使用PowerShell编写脚本,则可以使用:

=

如果要在.bat文件脚本中执行此操作,则会产生一些开销。

$var = [Diagnostics.FileVersionInfo]::GetVersionInfo('C:/.../MY_FILE.dll').ProductVersion
© www.soinside.com 2019 - 2024. All rights reserved.