Получить только номера в версии из файла DLL - PullRequest
2 голосов
/ 27 марта 2019

Я пытаюсь получить версию файла .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

Ответы [ 5 ]

3 голосов
/ 27 марта 2019

И аналогично опубликованным, с небольшими отличиями.

A :

@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

A версия:

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 голосов
/ 27 марта 2019
  • Вам нужно будет разобрать с for /f.
  • И еще for /f для восстановления поврежденного вывода WMIC.

На cmdline (с использованием 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

В пакетном файле удвойтезнаки процента для мета-переменной (переменных)

2 голосов
/ 27 марта 2019

Вы должны использовать:

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

2 голосов
/ 27 марта 2019

Таким образом, для этого вам понадобится цикл 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%

Обратите внимание, что помощь не поможет вам с символом экранирования каретки, используемым на =, однако помощь вы можете найти здесь, на SO.

0 голосов
/ 30 марта 2019

Если вы выполняете сценарии в 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+++
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...