我正在尝试获取.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:
@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
到当地环境。
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变量的百分号
你应该使用:
@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>
循环。
所以你需要一个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%
上使用的脱字符转义符,但是您可以在此处找到帮助。
如果您使用PowerShell编写脚本,则可以使用:
=
如果要在.bat文件脚本中执行此操作,则会产生一些开销。
$var = [Diagnostics.FileVersionInfo]::GetVersionInfo('C:/.../MY_FILE.dll').ProductVersion