Показать полную графическую версию : [решено] Использование утилит Билла Стюарта в BAT
Lucretius
03-02-2013, 17:51
Недавно натолкнулся на набор утилит командной строки (автор: Билл Стюарт), предназначенных для администрирования Windows. Скачать и ознакомиться с описанием можно по ссылке (http://www.westmesatech.com/wast.html).
Возможности утилит удобно использовать в скриптах, например в BAT. Утилиты бесплатны, их также можно использовать в собственных приложениях с предварительного разрешения автора.
Вопрос по утилитам FVerTest.exe и OSTest.exe:
FVerTest.exe выводит информацию о версии EXE/DLL, в виде:
[1.0.0.0] C:\Windows\system32\Library.dll
OSTest.exe выводит информацию об ОС:
Platform: ...
Version: ...
Service Pack: ...
Build: ...
Home edition: ...
Role: ...
Terminal Server: ...
Architecture: ...
Каким образом можно вывести в переменные эти значения/одно из значений?
Чтобы впоследствии можно было создать похожие конструкции:
If "%version%"=="1.0.0.0" GoTo :enter_path
так можно и без утилит
FOR /F "tokens=3* delims= " %%i in ('ver') do set version=%%i
If version==5.1 GoTo :xp
If version==6.1 GoTo :seven
и т.д.
Windows NT 3.1 (1993)
Windows NT 3.5 (1994)
Windows NT 3.51 (1995)
Windows NT 4.0 (1996)
Windows 2000 (2000) — Windows NT 5.0
Windows XP (2001) — Windows NT 5.1
Windows XP 64-bit Edition (2006) — Windows NT 5.2
Windows Server 2003 (2003) — Windows NT 5.2
Windows Vista (2006) — Windows NT 6.0
Windows Home Server (2007) — Windows NT 5.2
Windows Server 2008 (2008) — Windows NT 6.0
Windows Small Business Server (2008) — Windows NT 6.0
Windows 7 — Windows NT 6.1 (2009)
Windows Server 2008 R2 — Windows NT 6.1 (2009)
Windows Home Server 2011 — Windows NT 6.1 (2011)
Windows 8 — Windows NT 6.2 (2012)
Windows Server 8 — Windows NT 6.2 (2012)
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=[] " %%i in (`FVerTest.exe "C:\WINDOWS\system32\shell32.dll"`) do set sVersion=%%i
if defined sVersion echo [%sVersion%]
endlocal
exit /b 0
Но почему Вы не хотите использовать имеющийся функционал по сравнению версии:
SYNOPSIS
fvertest [-v version] [-q] [d:][path]filename.ext
?
Наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion
FVerTest.exe -v "6.0.2900.5853" -q "C:\WINDOWS\system32\shell32.dll"
if %errorlevel% equ 1 echo Version is equal
endlocal
exit /b 0
Работа с «OSTest.exe» аналогична приведённым примерам.
Lucretius
03-02-2013, 20:37
Iska спасибо! Вы мне помогли.
Встроенный функционал мне не подходит т.к. мне недостаточно верифицировать конкретную версию, а необходимо принимать отдельное решение для каждой версии.
Lucretius, приведите пример.
Lucretius
04-02-2013, 18:56
Lucretius, приведите пример. »
Byte patch(локализация) с поправкой на версию.
Не то. Опишите существующий алгоритм. Можно словами.
Lucretius
04-02-2013, 19:48
Опишите существующий алгоритм. Можно словами. »
Алгоритм, как Вы понимаете в процессе реализации. В BAT я не силён поэтому сейчас застрял на сборке скрипта. Если словами, то используется патч(исполняемый файл) соответствующий версии пропатчиваемой программы. Всего патчей 3, ввиду небольшого размера патчей(<50kb) для выходного размера инсталлятора это не критично. В качестве инсталлятора - 7z SFX по причине простоты и прозрачности для антивирусного ПО.
Lucretius, я просто не могу понять, почему Вы считаете, что использование «-v» Вам не подходит?!
Lucretius
04-02-2013, 22:20
Iska, Да действительно в моём случае лучше использовать «-v» для каждой версии. Я ошибочно полагал что при выводе значения в переменную код будет проще. Впрочем это удобно для вывода информации о версии в отображаемом тексте например в диалоге или предупреждении.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC