Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Помогите переделать OEMINFO.cmd в Автоит скрипт (http://forum.oszone.net/showthread.php?t=133723)

Pozia 03-03-2009 20:44 1054117

Помогите переделать OEMINFO.cmd в Автоит скрипт
 
Проблема такая же как и описанная мною в теме .Опять виновник кард рийдер. Только сложнее. Нужно переделать вот это:

HTML код:

@echo off

rem магические слова :)
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

rem <--- ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ --->
rem полный путь и имя файла oeminfo
set OEMFILE=%SYSTEMROOT%\system32\oeminfo.ini
rem использовать ли реестровый метод для составления списка апдейтов (1 - да; 0 - нет)
set REGMODE=0
rem маркерный файл для определения cdrom-а
set TAGFILE=WIN51
rem производитель
set MANUFACTURER=Pozia
rem модель
set MODEL=Windows XP Pozia Edition 2009
rem кол-во апдейтов в одной строке (по ум. 6)
set UPMAX=6
rem по какой длине выравнивать названия обновлений (по ум. 8)
set UPNAMEL=8
rem вписывать или нет серийник в файл oeminfo (1 - да; 0 - нет)
set KEY=1
rem сделать ли видимым серийник в окне "Сведения о поддержке" (1 - да; 0 - нет)
rem невидимость серийника означает, что он не будет виден в окне "Сведения о поддержке", но в файле OEMINFO он будет в строке SerialNo=
set KEYISVISIBLE=1
rem присвоение переменной CDROM буквы cdrom-а, определенной по маркерному файлу
rem (CDROM-ом считается первый найденный дисковод с маркерным файлом)
for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (if exist "%%d:\%TAGFILE%" set CDROM=%%d:&& goto metka)
:metka
rem каталог с апдейтами и маска для отбора файлов в каталоге апдейтов (*.* - все; *.cat - только каталоги безопасности; KB*.* - только начинающиеся с KB и т.п.)
if defined CDROM (
        set UPDATESDIR=%CDROM%\I386\SVCPACK
        set UPDATESMASK=*.*
) else (
        rem определяем переменную CDROM как каталог на HDD
        rem (если файл oeminfo.cmd у Вас будет не в каталоге $OEM$,
        rem то измените число обрезаемых от переменной справа символов с 7 на требуемое Вам)
        set CDROM=%~dp0
        set CDROM=!CDROM:~0,-7!
        set UPDATESDIR=%SYSTEMROOT%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
        set UPDATESMASK=KB*.*
)

rem Определение версии REG.EXE
for /F "tokens=1" %%j in ('reg 2^>nul') do if "%%j"=="REG" set REGEXE=rus

rem Обеспечение правильности отработки мультизагрузочного CD/DVD
if exist "%CDROM%\I386\winn?.sif" (
        set WINNTSIF=%CDROM%\I386\winn?.sif
) else (
        if defined REGEXE (
                for /F "tokens=3 delims=        " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath') do set SrcP=%%j
        ) else (
                for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v SourcePath') do set SrcP=%%j
        )
        if exist "!SrcP!\winn?.sif" set WINNTSIF=!SrcP!\winn?.sif
)
rem <--- ОКОНЧАНИЕ ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ --->

rem язык (419 - рус.), а также название, пакет обновлений, версия и сборка ОС
rem !ВАЖНО! - в кач-ве разделителя нужно указать только символ табуляции для
rem русской версии REG.EXE и только пробел для английской
if defined REGEXE (
        for /F "tokens=3 delims=        " %%j in ('reg query "HKCU\Control Panel\International" /v Locale') do set lang=%%j
        for /F "tokens=3 delims=        " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName') do set PN=%%j
        for /F "tokens=3 delims=        " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion') do set CSDV=%%j
        for /F "tokens=3 delims=        " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion') do set CV=%%j
        for /F "tokens=3 delims=        " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLab') do set BUILD=%%j
) else (
        for /F "tokens=3 delims= " %%j in ('reg query "HKCU\Control Panel\International" /v Locale') do set lang=%%j
        for /F "tokens=3* delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName') do set PN=%%j %%k
        for /F "tokens=3* delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CSDVersion') do set CSDV=%%j %%k
        for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion') do set CV=%%j
        for /F "tokens=3 delims= " %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLab') do set BUILD=%%j
)

rem Анализ командной строки
for /F %%j in ('echo.%* ^| find /i /c "/k"') do if %%j GTR 0 set KEY=1
for /F %%j in ('echo.%* ^| find /i /c "/v"') do if %%j GTR 0 set KEYISVISIBLE=1
for /F %%j in ('echo.%* ^| find /i /c "/r"') do if %%j GTR 0 set REGMODE=1

rem Т.к. используется символ ">", то существующий файл OEMFILE будет перезаписан;
rem т.о. нет нужды его предварительно удалять
echo [General]> "%OEMFILE%"
echo Manufacturer=%MANUFACTURER%>> "%OEMFILE%"
echo Model=%MODEL%>> "%OEMFILE%"

rem Достаем из winn?.sif серийный номер
rem Это работает независимо от вида записи ProductKey=XXXX или ProductKey = XXXX (с пробелами)
if defined WINNTSIF (
        if %KEY% == 1 (
                for /F "tokens=3 delims==] " %%j in ('find /I /N "ProductKey" "%WINNTSIF%"') do set PK=%%j
        )
)

rem вспомогательные переменные
set i=1
set l=0
set c=0
set n=0

if %REGMODE% == 1 (
        rem Все обновления, установленные в системе
        rem (отбираются по подветкам; повторяющиеся эл-ты исключаются)
        for /F "tokens=5* delims=\" %%j in ('reg query "HKLM\SOFTWARE\Microsoft\Updates" /s ^| findstr /i /v "REG_ FileList"') do (
                if %ERRORLEVEL%==0 (
                        for /F "usebackq tokens=3 delims=\" %%m in ('%%j\%%k') do (
                                rem !ВАЖНО! - в следующей строке после %%m должно быть не меньше UPNAMEL-1 пробелов
                                rem (это нужно для выравнивания списка обновлений при наличии апдейтов с короткими названиями - WGA, IE7)
                                set tmp=%%m         
                                set tmp=!tmp:~0,%UPNAMEL%!
                                set kb[!tmp!]=!tmp:~2,6!
                        )
                        rem учет обновлений .Net 2.0
                        for /F "tokens=2 delims=\" %%m in ('echo %%j\%%k^| findstr /i /c:" .NET"') do (
                                set tmp=%%m         
                                set tmp=!tmp:~0,%UPNAMEL%!
                                set kb[!tmp!]=!tmp:~2,6!
                        )
                )
        )
        rem Обновления, перечисленные в ветке Uninstall (начинающиеся с KB + 6 цифр)
        for /F "tokens=7 delims=\" %%m in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" ^| findstr /i "\<KB[0-9][0-9][0-9][0-9][0-9][0-9]"') do (
                set tmp=%%m         
                set tmp=!tmp:~0,%UPNAMEL%!
                set kb[!tmp!]=!tmp:~2,6!
        )

        rem Определяем общее количество обновлений
        for /F %%j in ('set kb[') do set /A n+=1
       
        call :suppinfo
       
        rem Сортировка и перенос списка обновлений в файл, указанный в переменной OEMFILE
        for /F "tokens=2 delims=[]" %%j in ('set kb[ ^| sort') do (set kbname=%%j&& call :myprint)
) else (
        rem Определение общего кол-ва файлов в каталоге апдейтов соотв-щих маске
        for /F %%j in ('dir /b /a:-d "%UPDATESDIR%\%UPDATESMASK%"') do set /A n+=1
       
        call :suppinfo
       
        rem Список апдейтов (имена всех файлов без расширений; имена выравниваются по длине до UPNAMEL символов)
        for /F "tokens=1 delims=." %%j in ('dir /b /a:-d "%UPDATESDIR%\%UPDATESMASK%"') do (set kbname=%%j&&set kbname=!kbname!          &&set kbname=!kbname:~0,%UPNAMEL%!&& call :myprint)
)
rem Выход из этого пакетного файла.
rem Команда GOTO принимает в качестве метки перехода строку :EOF, которая вызывает
rem передачу управления в конец текущего пакетного файла. Это позволяет легко
rem выйти из пакетного файла без определения каких-либо меток. (из справки по goto)
goto :EOF

:myprint
if !c! == 0 (
        set str=!kbname!
) else (
        set str=!str!  !kbname!
)

set /A c+=1

if !c! == %UPMAX% (
        echo Line!i!=!str!>> "%OEMFILE%"
        set /A i+=1
        set /A l+=1
        set str=
        set c=0
        set /A tmp=n-l*UPMAX
) else (
        if %n% LSS %UPMAX% (
                if !c! == %n% (
                        echo Line!i!=!str!>> "%OEMFILE%"
                )
        )
        if !tmp! LSS %UPMAX% (
                if !c! == !tmp! (
                        echo Line!i!=!str!>> "%OEMFILE%"
                )
        )
)
goto :EOF

:suppinfo
if defined PK (
        if %KEYISVISIBLE% == 0 (
                echo [OEMSpecific]>> "%OEMFILE%"
                echo SerialNo=%PK%>> "%OEMFILE%"
                )
        )
)

echo [Support Information]>> "%OEMFILE%"
if %lang% == 00000419 (
        echo Line!i!=ОС:%PN:Microsoft=% %CSDV:Service Pack=SP% версия %CV% сборка %BUILD%>> "%OEMFILE%"
) else (
        echo Line!i!=OS:%PN:Microsoft=% %CSDV:Service Pack=SP% version %CV% build %BUILD%>> "%OEMFILE%"
)
set /A i+=1

if defined PK (
        if %KEYISVISIBLE% == 1 (
                if %lang% == 00000419 (
                        echo Line!i!=Ключ продукта: %PK%>> "%OEMFILE%"
                ) else (
                        echo Line!i!=Product Key: %PK%>> "%OEMFILE%"
                )
                set /A i+=1
        )
)
echo Line!i!=>> "%OEMFILE%"
set /A i+=1

rem Дата и время инсталляции ОС в формате DD.MM.YYYY (hh:mm), например 20.05.2005 (14:37)
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!
rem Вы можете добавить дополнительную инф-цию для отображения в окне "Сведения о поддержке"
rem в рус. и/или анг. версии (для вставки пустой строки исп-те команду echo Line!i!=>> "%OEMFILE%"
rem ; и не забывайте ставить set /A i+=1 перед каждой строкой)
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!
for /F %%t in ('time/T') do set T=%%t
if %lang% == 00000419 (
        echo Line!i!=-------------------------------------------------------------------------------->> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=Дата и время установки: %date% ^(%T%^)>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=-------------------------------------------------------------------------------->> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=По любым вопросам и предложениям можно обратиться:>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=Velcom: 1-111-111-11-11>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=MTC:    1-111-111-11-11>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=ICQ:    111-111-111>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=Mail:      1111@111111.11>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=111111 11111111 1111111>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=-------------------------------------------------------------------------------->> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=Установленные компоненты и обновления ^(%n%^):>> "%OEMFILE%"
) else (
        echo Line!i!=Installation ^(updation^) date and time: %date% ^(%T%^)>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=>> "%OEMFILE%"
        rem Example for adding custom information
        rem set /A i+=1
        rem echo Line!i!=Your information>> "%OEMFILE%"
        set /A i+=1
        echo Line!i!=Installed Components and Updates ^(%n%^):>> "%OEMFILE%"
)
set /A i+=1
echo Line!i!=>> "%OEMFILE%"
set /A i+=1
goto :EOF

Для тех кто не знает командный файл с данным содержанием вносит информацию OEM. В данном случае - версию винды, дату и время установки, личную информацию, количество обновлений и какие именно установлены в системе. В общем нужен очень этот командный файл в Автоит версии.

Огромная надежда на решение этого вопроса на Вас, уважаемый amel27. :)


Время: 04:37.

Время: 04:37.
© OSzone.net 2001-