PDA

Показать полную графическую версию : [решено] Использование утилит Билла Стюарта в 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

zion87
03-02-2013, 19:47
так можно и без утилит


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)

Iska
03-02-2013, 20:19
@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 спасибо! Вы мне помогли.
Встроенный функционал мне не подходит т.к. мне недостаточно верифицировать конкретную версию, а необходимо принимать отдельное решение для каждой версии.

Iska
03-02-2013, 22:29
Lucretius, приведите пример.

Lucretius
04-02-2013, 18:56
Lucretius, приведите пример. »
Byte patch(локализация) с поправкой на версию.

Iska
04-02-2013, 19:04
Не то. Опишите существующий алгоритм. Можно словами.

Lucretius
04-02-2013, 19:48
Опишите существующий алгоритм. Можно словами. »
Алгоритм, как Вы понимаете в процессе реализации. В BAT я не силён поэтому сейчас застрял на сборке скрипта. Если словами, то используется патч(исполняемый файл) соответствующий версии пропатчиваемой программы. Всего патчей 3, ввиду небольшого размера патчей(<50kb) для выходного размера инсталлятора это не критично. В качестве инсталлятора - 7z SFX по причине простоты и прозрачности для антивирусного ПО.

Iska
04-02-2013, 21:30
Lucretius, я просто не могу понять, почему Вы считаете, что использование «-v» Вам не подходит?!

Lucretius
04-02-2013, 22:20
Iska, Да действительно в моём случае лучше использовать «-v» для каждой версии. Я ошибочно полагал что при выводе значения в переменную код будет проще. Впрочем это удобно для вывода информации о версии в отображаемом тексте например в диалоге или предупреждении.




© OSzone.net 2001-2012