Как узнать версию установленной программы

у нас есть пакетный файл, который устанавливает несколько программ в рамках установки разработчиков. Это выполняется периодически, когда мы получаем новые версии используемых компонентов. Поэтому было бы неплохо установить, если версии разные.

в командной строке я могу запустить это и вернуть установленную версию:

wmic datafile where name=’C:Program Files (x86)Common FilesCompanyProductVersion12Product.exe’ get version /format:list

который дает выход Version=12.1.369.0 .

однако, когда я помещаю это в пакетный файл, подобный этому, и пытаюсь извлечь версия:

echo off FOR /F «tokens=2 delims==» %%I in (‘»wmic datafile where^(name^=»C:Program Files (x86)Common FilesCompanyProductVersion12Product.exe» get version /format:list»‘) DO (SET «RESULT=%%I») ECHO %RESULT%

Я получаю ответ Common was unexpected at this time.

некоторые части могут быть избыточными, поскольку я пробовал вещи из сети, чтобы исправить это.

что я пропустила?

Как узнать, какая Windows на компьютере? Проверяем версию Виндовс

автор: graham.reeds

5 ответов

у вас есть набор неуместных двойных кавычек, а также дополнительный ( .

WMIC использует синтаксис SQL, а строки заключены в одинарные кавычки.Внутренние одинарные кавычки не мешают команде, заключающей одинарные кавычки.

вы можете поместить двойные кавычки вокруг предложения WHERE (не включая ключевое слово WHERE), чтобы избежать некоторых проблем с escape в предложении for DO ().

но это может быть не совсем все решение. Ты не видишь этого. с вышеуказанным кодом, но результат фактически содержит возврат завершающей каретки (0x0D). Это связано с причудой с тем, как FOR /F обрабатывает вывод wmic unicode. Каждая строка вывода WMIC будет иметь дополнительный возврат трейлинг-каретки.

пока вы всегда получаете доступ к результату с помощью %RESULT% (нормальное расширение), тогда у вас не будет никаких проблем. Но если вам когда-либо понадобится отложенное расширение, у вас могут возникнуть проблемы, как показано ниже.

Читайте также:
Программа бизнес пак 7 как работать

один удобный способ для удаления нежелательного возврата каретки необходимо использовать дополнительный уровень FOR.

автор: dbenham

вот подпрограмма, которую я использую для этого в моем собственном пакетном скрипте обновления программного обеспечения:

он может получить любой атрибут файла, поддерживаемый wmic datafile get . Например, вот как вы можете получить версию файла для установленного Adobe Reader:

call :getfattr version «%ProgramFiles(x86)%AdobeReader 11.0ReaderAcroRd32.exe» echo «!version!»

после этого переменная среды version будет содержать запрошенную строку версии. Если :getfattr не, version гарантированно будет unset.

трассировка выполнения теста для этого пример выглядит так (отложенное расширение уже включено, хотя это не предполагается :getfattr):

как вы можете видеть, это довольно прямо и не слишком много. Тем не менее, он на цыпочках проходит через минное поле cmd и wmic подводных камней.

Как узнать модель материнской платы компьютера в Windows 10

во-первых, имя атрибута, который вы хотите получить, также является именем, используемым для переменной, в которой вы хотите получить результат ( version в тесте выше). Внутри подпрограммы это имя %1 , так что set %1= очищает его.

имя файла, которое вы передаете, нуждается в предварительной обработке, прежде чем его можно будет безопасно передать wmic и для этого требуется переменная оболочки, поэтому setlocal выдается, чтобы избежать топтания переменных вызывающего абонента.

set «name=%~f2» копирует имя в переменную среды после удаления всех окружающих двойных кавычек и расширения его до полного пути. Двойные кавычки окружают весь set аргумент для предотвращения горя, вызванного амперсандами или круглые скобки в именах путей.

wmic запросы используют SQL-подобный синтаксис, где строковые значения окружены одинарной кавычкой ‘ символы и — это побег, который подавляет любое особое значение следующего символа. Поскольку оба они являются законными в именах путей Windows, все вхождения либо нуждаются в префикс. set «name=%name:=%» escapes встроенные обратные косые черты и ‘%name:’=’%’ построить в wmic командная строка экранирует встроенные одинарные кавычки и добавляет требуются окружающие.

Читайте также:
Программа premiere pro требования

cmd парсер не отключает специальную обработку между одинарными кавычками, и имя больше не имеет никаких окружающих двойных кавычек, поэтому встроенные пробелы, круглые скобки или амперсанды могут потенциально нарушать вещи. Чтобы защититься от этого, wmic всю name= аргумент получает двойную кавычку. Нет необходимости в специальной обработке для двойных кавычек уже внутри имени, потому что двойные кавычки are запрещено в именах файлов Windows так их не может быть.

что груз состоит из трех разделенных команд, которые for будет расширяться как одна командная строка перед cmd получает для обработки отдельных команд. В частности, это означает, что set «%%B» расширяется до endlocal выполняется, что ставит переменную, созданную этим set за пределами setlocal / endlocal объем и делает его доступным для абонента.

%%B всегда будет расширяться в формате name=value из-за /format:list переключатель перешел в wmic ; имя будет таким же, как указано в get глагол, и вот как имя, которое вы передаете, в конечном итоге выбирает переменную, которую вы возвращаете. Весь name=value до set цитируется в случае, если запрошенный атрибут содержит специальные символы оболочки. Это делает: getfattr безопасным, но вы можете использовать !отложено! расширение, а не % преждевременное % расширение везде, где вы на самом деле используйте переменную, которую он возвращает вам.

на tokens=1 eol= » %%A in (‘wmic datafile where name^=»%file%» get version^|findstr /i /v /c:»version»‘) do set a=%%A %file%» get version|findstr /i /v /c:»version»>test.txt

возможно, это может сработать

set filepath=%~f1 set file=%filepath:=% for /f «tokens=1 eol= » %%A in (‘wmic datafile where name^=»%file%» get version^|findstr /i /v /c:»version»‘) do if not «»==%%A set a=%%A tokens=1 eol= » %%A in (‘wmic datafile where name^=»%file%» get version^|findstr /i /v /c:»version»^|findstr /i /v /r «^$»‘) do set a=%%A %file%» get version|findstr /i /v /c:»version»|findstr /i /v /r «^$»>test.txt
автор: Noodles

Читайте также:
Программа исследования супружеской пары пример

вот альтернативный метод, обходит WMIC для powershell Get-WmiObject.

возвращает этот результат при двойном щелчке a .пакетный файл cmd.

Version ——- 0.0.0.0
автор: Knuckle-Dragger

и два способа без внешних инструментов 1.WMIC

WMIC DATAFILE WHERE name=»C:install.exe» get Version /format:Textvaluelist

обратите внимание на двойные слэши в имени файла.

2.MAKECAB поскольку WMIC не установлен на домашних версиях windows, вот способ с makecab, который будет работать на каждой машине windows:

пример вывода (он имеет строковую версию, которая является небольшим дополнением к методу wmic:)):

c:> fileinfo.bat /l C:install.exe file:install.exe date:11/07/07 size:562688 csum:380ef239 time:07:03:18a vern:9.0.21022.8 vers:9.0.21022.8 built by: RTM lang:1033

3 используя shell.применение и гибридный пакетjscript.Вот!—6—>tooptipInfo.летучая мышь!—7—> :

используется против cmd.exe:

C:WindowsSystem32cmd.exe : File description: Windows Command Processor Company: Microsoft Corporation File version: 6.3.9600.16384 Date created: ?22-?Aug-?13 ??13:03 Size: 347 KB

Источник: askdev.ru

Как узнать версию установленной программы в CentOS

Изображение баннера

sed (GNU sed) 4.7 Packaged by centos Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Jay Fenlason, Tom Lord, Ken Pizzini, Paolo Bonzini, Jim Meyering, and Assaf Gordon. GNU sed home page: . General help using GNU software: . E-mail bug reports to: .

Чтобы определить версию Virtualbox выполните

Oracle VM VirtualBox VM Selector v6.1.10_Ubuntu (C) 2005-2020 Oracle Corporation All rights reserved. No special options. If you are looking for —startvm and related options, you need to use VirtualBoxVM.

Источник: urn.su

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru