Назад | Перейти на главную страницу

Проверка свойств файла в пакетном скрипте?

У меня есть командный файл от поставщика для исправления некоторого программного обеспечения на компьютере с Vista. Я собираюсь использовать GPO, чтобы выдвинуть его как сценарий запуска.

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

Я хотел бы добавить код в начало сценария, чтобы проверить наличие exe, и вытащить строку, которую можно просмотреть, если щелкнуть правой кнопкой мыши exe, вкладку сведений, поле «Версия продукта».

Пожалуйста, предлагайте другие решения в качестве комментариев. Я знаю о других способах справиться с этим, и у меня есть пара. Я открыт для предложений, но предпочел бы, чтобы все ответы приходились на этот конкретный вопрос. Можно ли это сделать, если да, то как?

Спасибо! -Мэттью

Вам понадобится утилита под названием filever, которая поставляется в качестве вспомогательного инструмента с Windows. Вот страница детализируя его варианты.

В пакетном файле вы, вероятно, использовали бы его так:

@IF NOT EXIST C:\PATH\TO\YOUR\APP.EXE GOTO END
@SET APPVER=3.14159
@\\FILESHARE\filever.exe "C:\PATH\TO\YOUR\APP.EXE" | findstr /i %APPVER% > nul
@IF %ERRORLEVEL% EQU 0 GOTO END
@\\FILESHARE\PATH\TO\YOUR\APP\Update.exe
:END
  • Первая строка проверяет существование вашего приложения.
  • Вторая строка устанавливает номер версии, которую вы хотите исправить. к
  • В третьей строке используется файловая машина инструмент от MS и встроенный findstr инструмент для определения текущей версии и сравнения ее с версией, которую вы хотите, чтобы они запустили
  • Четвертая строка говорит им пропустить запуск Update.exe, если они уже имеют правильную версию.
  • Пятая строка запускает обновление для людей, которых нужно исправить.
  • Последняя строка - это указанная выше точка GOTO, которая завершает пакет.

Вы можете легко сделать это с помощью Powershell. Что-то вроде:

if ([System.Diagnostics.FileVersionInfo]::GetVersionInfo("PathToExe").FileVersion -eq "1.1.0.0") {
    .\DoPatch.bat
}

Это проверяет версию файла, и если она соответствует вашей желаемой версии, он выполнит ваш командный файл.