从 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
循环。
与发布的内容类似,只有细微差别。
一个batch-file:
@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
一个cmd版本:
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+++
我正在尝试获取 .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
循环。
与发布的内容类似,只有细微差别。
一个batch-file:
@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
一个cmd版本:
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+++