首页 > 解决方案 > 如何在 Windows 批处理文件中使用 WMIC 将 DLL 或 EXE 的文件版本获取到变量?

问题描述

我尝试使用 Windows 批处理文件获取文件版本。此命令成功将版本打印到控制台。

WMIC DATAFILE WHERE name="Z:\\bin\\My_project.dll" get Version /format:Textvaluelist

但是当我尝试使用以下方法将此输出传递给变量时,Windows 命令处理器会输出:

Z:\\bin\\My_project.dll - 无效的别名动词。

这个命令行有什么问题?

for /f %%a in ('WMIC DATAFILE WHERE name="Z:\\bin\\My_project.dll" get Version /format:Textvaluelist') do set val=%%a

标签: windowsbatch-filewmic

解决方案


这就是我尝试使用此任务的方式WMIC

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

第二个For循环旨在克服由 unicodeWMIC结果导致的不需要的输出。


编辑

如果WMIC没有规定,您可以VBScript从批处理文件中使用:

使用 Windows 脚本宿主:

<!-- :
@Echo Off
For /F %%A In ('CScript //NoLogo "%~f0?.wsf"') Do Set "val=%%A"
Set val 2>Nul
Pause
Exit /B

-->
<Job><Script Language="VBScript">
  WScript.Echo CreateObject("Scripting.FileSystemObject").GetFileVersion("Z:\bin\My_project.dll")
</Script></Job>

或通过mshta.exe

@Echo Off
For /F %%A In ('
    MsHTA VBScript:Execute("Set o=CreateObject(""Scripting.FileSystemObject""):o.GetStandardStream(1).Write(o.GetFileVersion(""Z:\bin\My_project.dll"")):Close"^)
') Do Set "val=%%A"
Set val 2>Nul
Pause

推荐阅读