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

Get only numbers in version from dll file

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

我找到了代码

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

此代码returns:

Version
3.56.0.1

我需要 return 仅为“3.56.0.1”,这可以保存在一个变量中,因为我可以在之后调用回显。

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

我怎样才能得到这个?

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

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

此代码returns:

Version=3.56.0.1

因此您需要一个 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%

请注意,该帮助不会帮助您处理 = 中使用的插入符号转义字符,但是您可以在此处找到帮助。

  • 您需要使用 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

在批处理文件中,将元变量的百分号加倍

你应该使用:

@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%

循环遍历您的命令并根据指定的分隔符 (=) 找到第二个标记。

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

与发布的内容类似,只有细微差别。

一个:

@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到本地环境。

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

$var = [Diagnostics.FileVersionInfo]::GetVersionInfo('C:/.../MY_FILE.dll').ProductVersion

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

C:>TYPE gv.bat
@ECHO OFF

FOR /F "delims=" %%v IN ('PowerShell -NoLogo -NoProfile -Command ^
    "[Diagnostics.FileVersionInfo]::GetVersionInfo('C:/Windows/System32/dfscli.dll').ProductVersion"') DO (
    SET "var=%%~v"
)
ECHO var is +++%var%+++

C:>CALL gv.bat
var is +++10.0.17763.1+++